如何对具有相同键值的对象数组求和?
我有这个数组:
let arrData = [{ category: "Main Expenses", amount: 420 },
{ category: "Food", amount: 50 },
{ category: "Main Expenses", amount: 4530},
{ category: "Food", amount: 4520 },
{ category: "Main Expenses", amount: 4530 },
{ category: "Food", amount: 450 },
{ category: "Self Care", amount: 7540 },
{ category: "Child Care", amount: 4570 }]
我需要获得具有唯一类别的数组,如下所示:
[Main Expenses: 9480,
Food: 5020,
Self Care: 7540,
Child Care: 4570]
答案 0 :(得分:2)
由于数组不支持键和值对,因此不可能在数组中提供预期的输出。您可以选择对象。
您可以使用reduce并按类别名称检查对象是否包含key
。如果是这样,则添加金额,否则按类别名称创建键并将其值设置为金额
let arrData = [{
category: "Main Expenses",
amount: 420
},
{
category: "Food",
amount: 50
},
{
category: "Main Expenses",
amount: 4530
},
{
category: "Food",
amount: 4520
},
{
category: "Main Expenses",
amount: 4530
},
{
category: "Food",
amount: 450
},
{
category: "Self Care",
amount: 7540
},
{
category: "Child Care",
amount: 4570
}
]
let newData = arrData.reduce((acc, item) => {
acc[item.category] = acc[item.category] ?
acc[item.category] + item.amount :
item.amount;
return acc;
}, {});
console.log(newData)