数组转树的写法,求指教?
给定:
const source = [
{ id: 19, parentId: 0 },
{ id: 18, parentId: 16 },
{ id: 17, parentId: 16 },
{ id: 16, parentId: 0 },
{ id: 15, parentId: 17 },
{ id: 14, parentId: 19 },
{ id: 21, parentId: 19 },
{ id: 20, parentId: 18 },
]
输出样例:
{
"id": 0,
"children": [
{
"id": 19,
"parentId": 0,
"children": [
{
"id": 14,
"parentId": 19
},
{
"id": 21,
"parentId": 19
}
]
},
{
"id": 16,
"parentId": 0,
"children": [
{
"id": 18,
"parentId": 16,
"children": [
{
"id": 20,
"parentId": 18
}
]
},
{
"id": 17,
"parentId": 16,
"children": [
{
"id": 15,
"parentId": 17
}
]
}
]
}
]
}
求一份解答。
回复
1个回答

test
2024-07-14
这样?
js
代码
source.reduce((o, i) => {
i = Object.assign(o[i.id] ??= {}, i);
((o[i.parentId] ??= {}).children ??= []).push(i);
return o;
}, {0: {id: 0}})[0]
结果
{
"id": 0,
"children": [
{
"id": 19,
"parentId": 0,
"children": [
{
"id": 14,
"parentId": 19
},
{
"id": 21,
"parentId": 19
}
]
},
{
"children": [
{
"id": 18,
"parentId": 16,
"children": [
{
"id": 20,
"parentId": 18
}
]
},
{
"id": 17,
"parentId": 16,
"children": [
{
"id": 15,
"parentId": 17
}
]
}
],
"id": 16,
"parentId": 0
}
]
}
回复

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