关于遍历数组对象变更数据格式的问题?
let outlist = [{
level: 1, content: '标题测试'
},{
level: 2, content: '互联网理财融资模式'
},{
level: 1, content: '滴滴出行融资模式存在问题对策'
},{
level: 2, content: '市场竞争白热化导致的被动融资'
},{
level: 3, content: '111122223333'
}]
请问如何将以上代码转换成如下格式:
let newlist = [{
level: 1, content: '标题测试', children: [{
level: 2, content: '互联网理财融资模式'
}]},{
level: 1, content: '滴滴出行融资模式存在问题对策', children: [{
level: 2, content: '市场竞争白热化导致的被动融资', children: [{
level: 3, content: '111122223333'
}]
}]
}]
我尝试了很多办法,但都未成功最后退而求其次,想通过一个自定义数组区分对象所属层级,但依旧未果
function sortFun (num) {
let index = 0
for (let j = 0; j < meun.length; j++) {
if (meun[j].level == num + 1) {
meun[j].storey[num] = index++
}
}
return meun // 只能标注出第一层的下标
// sortFun(num++) // 想通过递归,但是报 “Maximum call stack size exceeded” 错误
}
···
回复
1个回答

test
2024-06-21
function transform(list) {
const ret = {};
for (let i = 0; i < list.length; ++i) {
const { level } = item = {...list[i] };
const preLevel = Math.max(level - 1, 0);
if (!ret[preLevel]) {
ret[preLevel] = [item];
if (ret[level]) {
item.children = ret[level];
continue;
}
} else {
ret[preLevel].push(item);
}
ret[level] = item.children = [];
}
return ret[0];
}
console.log(transform(outlist));
回复

适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容