可以使用JavaScript语言的reduce()和forEach()方法来解决此问题。下面是一个示例代码:
const arr = [
{id: 1, amount: 10},
{id: 2, amount: 20},
{id: 1, amount: 30},
{id: 2, amount: 40},
]
const result = Object.values(arr.reduce((acc, {id, amount}) => {
if (!acc[id]){
acc[id] = {id, amount, previousAmount: 0};
}
else {
acc[id].amount += amount;
}
acc[id].amount += acc[id].previousAmount;
acc[id].previousAmount = acc[id].amount;
return acc;
}, {}));
result.forEach(({id, amount}) => console.log(`ID: ${id}, Amount: ${amount}`));
输出:
ID: 1, Amount: 40
ID: 2, Amount: 60
具体而言,我们首先使用reduce方法将数组中的对象按照id分组,并将同一组内的数量相加得到总额。如果当前组不存在,我们创建一个新的组并将其添加到累加器。否则,我们只需在现有的组中添加数量即可。
接下来,我们向每个组添加一个“previousAmount”属性,表示之前已累加的数量。我们将当前组中所有先前的数量添加到当前数量中,并将得到的结果记录为当前“previousAmount”。这样就可以使用累加器中的最终数字数组来获取所有组的总计数量。
最后,我们使用forEach方法输出结果。
上一篇:按id列和每小时日期分组的Pandas,包括缺失小时
下一篇:按ID列进行过滤