我有像下面的平面数组,我想转换它以获得具有父子结构的嵌套数组。
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
}
...
]
我如何使用功能图和减少来实现它?会对任何建议表示赞赏)
答案 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);