关于遍历数组对象变更数据格式的问题?

作者站长头像
站长
· 阅读数 15
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个回答
avatar
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));
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容