如何将一个并列形式的数组对象,根据字段改为嵌套形式?-灵析社区

CTang

我有如下代码: Chapters = [{ level: '1', content: '案例概况010000-170900', url: '案例概况010000-170900.html' },{ level: '2', content: '案例概况010100-170901', url: '案例概况010100-170901.html' },{ level: '2', content: '案例概况010200-170902', url: '案例概况010200-170902.html' },{ level: '3', content: '案例概况010201-170903', url: '案例概况010201-170903.html' },{ level: '1', content: '案例概况020000-170904', url: '案例概况020000-170904.html' },{ level: '1', content: '案例概况030000-170905', url: '案例概况030000-170905.html' },{ level: '2', content: '案例概况030100-170906', url: '案例概况030100-170906.html' }] 我想将上述代码按照 level 字段划分,改造成如下格式 Chapters = [{ level: '1', content: '案例概况010000-170900', url: '案例概况010000-170900.html', Childs: [{ level: '2', content: '案例概况010100-170901', url: '案例概况010100-170901.html', Childs: [] },{ level: '2', content: '案例概况010200-170902', url: '案例概况010200-170902.html', Childs: [{ level: '3', content: '案例概况010201-170903', url: '案例概况010201-170903.html' }] }] },{ level: '1', content: '案例概况020000-170904', url: '案例概况020000-170904.html', Childs: [] },{ level: '1', content: '案例概况030000-170905', url: '案例概况030000-170905.html', Childs: [{ level: '2', content: '案例概况030100-170906', url: '案例概况030100-170906.html' }] }] 层级可能不限于 3 级,所以我能想到的是使用递归,但是尝试写了几遍均已失败告终 还望解答,万分感谢!

阅读量:211

点赞量:0

问AI
因为你的数组是按照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)