因为你的数组是按照level有序排列的,所以可以直接遍历 function createTreeByList(arr, res = []) { let parents = [] arr.forEach(item => { let pindex = parents.findLastIndex(parent => +parent.level < +item.level) if(pindex < 0){ res.push(item) }else{ let parent = parents[pindex] parent.childs = parent.childs || [] parent.childs.push(item) } parents.length = pindex + 1 parents.push(item) }) return res } Chapters = aaa(Chapters)