Angular JS - 如何求和json数组值?

时间:2017-12-22 08:15:58

标签: javascript arrays json angular

如何将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求和?

2 个答案:

答案 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

})