我有一个包含很多元素的数组。每个元素就像:
e1 = {
data: 12345,
month: 8,
year: 2018
}
使用这个数组,我想创建一个新的具有相同类型的元素数组,但要具有相同月份和相同年份的元素的每个数据的总和。
例如: 如果我的数组是:
myArray = [
{
data: 1,
month: 7,
year: 2018
},
{
data: 2,
month: 8,
year: 2018
},
{
data: 3,
month: 8,
year: 2018
}
]
我想要这个新数组:
myNewArray = [
{
data: 1,
month: 7,
year: 2018
},
{
data: 5,
month: 8,
year: 2018
}
]
您可以使用javascript函数帮助我吗?
答案 0 :(得分:0)
您可以使用reduce
按月份和年份对元素进行索引,并在找到新元素时递增data
:
var myArray = [{
data: 1,
month: 7,
year: 2018
},
{
data: 2,
month: 8,
year: 2018
},
{
data: 3,
month: 8,
year: 2018
}
];
var grouped = myArray.reduce((acc, curr) => {
var key = `${curr.year},${curr.month}`;
if (!(key in acc)) acc[key] = Object.assign({}, curr);
else acc[key].data += curr.data;
return acc;
}, {});
console.log(Object.values(grouped));