我有一个对象数组,如下所示;
{
'data': [{
value: 1000,
year: 1990
},
{
value: 1001,
year: 1990
},
{
value: 1002,
year: 1990
},
{
value: 1003,
year: 1991
},
{
value: 1004,
year: 1991
}
]
}
我想将相同的内容转换为下面的对象
{
'1990': [{
value: 1000,
year: 1990
},
{
value: 1001,
year: 1990
},
{
value: 1002,
year: 1990
}],
'1991':[{
value: 1003,
year: 1991
},
{
value: 1004,
year: 1991
}
]
}
在Javascript或Angular 4中有没有办法做同样的事情?
答案 0 :(得分:2)
使用Array#reduce函数迭代每个项目并检查累积对象是否包含具有该键的属性,添加它,为其分配一个数组然后推送该项目进去。如果包含,只需按下该项目。
const data = [{
value: 1000,
year: 1990
},
{
value: 1001,
year: 1990
},
{
value: 1002,
year: 1990
},
{
value: 1003,
year: 1991
},
{
value: 1004,
year: 1991
}
];
const mapped = data.reduce((acc, item) => {
if(!acc.hasOwnProperty(item.year)) {
acc[item.year] = [];
}
acc[item.year].push(item);
return acc;
}, {});
console.log(mapped);