我具有下面的平坦数组,我想将其转换为带有父子结构的嵌套数组。
let arr = [
{
id: 4,
parentId:1,
value: 20
},
{
id: 1,
parentId:2,
value: 20
},
{
id: 2,
parentId:1,
value: 20
},
{
id: 3,
parentId:1,
value: 20
},
{
id: 4,
parentId:2,
value: 20
},
]
我想以这种方式转换此数组:
[
{ id: 1,
children: [
{ id:4,
value:20,
parentId:1
},
{ id: 2,
value: 20,
parentId: 1
}
...
]
如何使用函数图并减少功能来实现它?对于任何建议)
您可以使用array#reduce
基于parentId
进行对象进行分组,并使用array#map
生成ID和孩子的数组。
let data = [ { id: 4, parentId:1, value: 20 }, { id: 1, parentId:2, value: 20 }, { id: 2, parentId:1, value: 20 }, { id: 3, parentId:1, value: 20 }, { id: 4, parentId:2, value: 20 }]
var grouped = data.reduce((r, o) => {
r[o.parentId] = r[o.parentId] || [];
r[o.parentId].push(o);
return r;
}, {});
var result = Object.keys(grouped).map(id => ({id, children: grouped[id]}));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }