JS Flat Array由MAP()嵌套到Repard()



我具有下面的平坦数组,我想将其转换为带有父子结构的嵌套数组。

 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; }

最新更新