嵌入map()和reduce()的js flat数组

时间:2017-12-27 07:20:34

标签: javascript arrays

我有像下面的平面数组,我想转换它以获得具有父子结构的嵌套数组。

 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
    }
...
]

我如何使用功能图和减少来实现它?会对任何建议表示赞赏)

1 个答案:

答案 0 :(得分:1)

您可以使用 afterDrawed : function() { var number = parseFloat($('#doughnutChart .doughnutSummaryNumber').html()); $('#doughnutChart .doughnutSummaryNumber').html(number.toLocaleString()); }, 根据array#reduce对对象进行分组,并使用parentId生成一个id和子数组。

array#map
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);