如何将JSON数组数据中的totalItem
数量相加?
[{"group": "B", "totalItem": 1},
{"group": "A", "totalItem": 1},
{"group": "C", "totalItem": 2},
{"group": "B", "totalItem": 3},
{"group": "A", "totalItem": 6},
{"group": "C", "totalItem": 2},]
在上面的示例中,我如何对角度相同的所有totalItem
求和?
答案 0 :(得分:1)
简单"美好的一天"
let counters = myArray.reduce((p,n) => {
if(p[n.group]) { p[n.group] += n.totalItem; }
else { p[n.group] = n.totalItem; }
return p;
}, []);
这是Javascript中常见的groupBy。首先,你在数组上有reduce
函数:它遍历数组并做你想做的任何事情。
第一个参数是一个可以执行您要求的函数,第二个参数是起始值。
所以在这里,你从一个空数组[]
开始。
然后,您迭代您的项目。我为前一个命名了2个变量p
(最后将返回的值),并为下一个(数组的当前对象)命名n
。
条件说:
如果数组中的组存在,则将totalItem添加到其中。如果没有,则使用totalItem的值创建它。
最后,您有一个包含所有群组的关联数组!
答案 1 :(得分:0)
您可以通过以下方法了解该过程。
var totals = {}; //This object will have the sums of each group
//Go through your array
myArray.forEach(function(item){
if (typeof totals[item.group] === 'undefined')
totals[item.group] = item.totalItem //Create a new group item in the result object
else
totals[item.group] += item.totalItem; //Item is there - so aggregate the value
})