Js问题,有一个jsonarray怎么转成多棵树?有没有好的方法

`[{

"id": "1",
"parentId": "0",
"nodeName": "公告资讯",

}, {

"id": "2",
"parentId": "1",
"nodeName": "查看公告",

}, {

"id": "4",
"parentId": "0",
"nodeName": "公告资讯",

}, {

"id": "5",
"parentId": "4",
"nodeName": "查看公告",

}, {

"id": "6",
"parentId": "4",
"nodeName": "查看公告1",

}]`
怎么转成
`[{

    "id": "1",
    "parentId": "0",
    "nodeName": "公告资讯",
    children: [{
        "id": "2",
        "parentId": "1",
        "nodeName": "查看公告",
    }]
}, {
    "id": "4",
    "parentId": "0",
    "nodeName": "公告资讯",
    children: [{
        "id": "5",
        "parentId": "4",
        "nodeName": "查看公告",
    }, {
        "id": "6",
        "parentId": "4",
        "nodeName": "查看公告1",
    }]
}`
阅读 2.1k
1 个回答
let arr = [{
    "id": "1",
    "parentId": "0",
    "nodeName": "公告资讯",
}, {
    "id": "2",
    "parentId": "1",
    "nodeName": "查看公告",
}, {
    "id": "4",
    "parentId": "0",
    "nodeName": "公告资讯",
}, {
    "id": "5",
    "parentId": "4",
    "nodeName": "查看公告",
}, {
    "id": "6",
    "parentId": "4",
    "nodeName": "查看公告1",
}];
let result = arr.reduce(function(prev, item) {
    prev[item.parentId] ? prev[item.parentId].push(item) : prev[item.parentId] = [item];
    return prev;
}, {});
for (let prop in result) {
    result[prop].forEach(function(item, i) {
        result[item.id] ? item.children = result[item.id] : ''
    });
}
result = result[0];
console.log(JSON.stringify(result))
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题