Javascript:如何从多维数组中对值进行分组和求和

4
我有一个像这样的数组:

enter image description here

我想要将其分组,并按照重复次数求和,结果如下所示:
  • AGE270:9
  • AGE203:5
  • AGE208:9
  • ...
  • AGEXXX:n
5个回答

13

使用Array.prototype.reduce函数的简单解决方案:

// Replace arr with your actual array!
var arr = [
        { AGENDADOR: 'AGE270', TOTAL : 6},
        { AGENDADOR: 'AGE270', TOTAL : 3},
        { AGENDADOR: 'AGE203', TOTAL : 5},
        { AGENDADOR: 'AGE028', TOTAL : 9},
    ],
  
  totals = arr.reduce(function (r, o) {
    (r[o.AGENDADOR])? r[o.AGENDADOR] += o.TOTAL : r[o.AGENDADOR] = o.TOTAL;
    return r;
  }, {});

console.log(totals);

arr.reduce(callback, [initialValue])

initialValue

Optional. Value to use as the first argument to the first call of the callback.

谢谢,完美地解决了问题。不过,最后的这个“{}”是什么意思呢?我没有加上它进行测试,结果当然不如预期。 - Magno Alberto
@MagnoAlberto,这个叫做initialValue。我从文档中引用了解释。 - RomanPerekhrest
问题在于,您最终得到的不是原始对象,而是分组的不同对象。 - Gerardo Buenrostro González

0
使用lodash
var data; // the data represented by your screenshot

var counts = _.chain(data)
    .groupBy('AGENDADOR')
    .map(_.size)
    .value();

counts 现在将会是这样一个对象:

{
    "AGE270": 9,
    "AGE203": 5,
    // etc
}

0
var sum = {};

yourArray.forEach(function(item) {
  if(sum[item.AGENDADOR] === undefined) {
    sum[item.AGENDADOR] = 0;
  }

  sum[item.AGENDADOR] += item.TOTAL  
});

使用这段代码,您将得到与sum对象中每个键对应的总数。类似于这样:
{
  AGE270: 9,
  AGE203: 5,
  AGE208: 9
} 

0

试一下这个:

function( data ){
        var outputObj = {} ;
        for(var i=0;i < data.length; i++){
                 datum = data[i];
                 if(outputObj[datum.AGENDADOR])
                         outputObj[datum.AGENDADOR] += parseInt( datum.TOTAL) ;
                 else
                         outputObj[datum.AGENDADOR] = parseInt( datum.TOTAL);
                }

        return outputObj;

};


0

怎么样使用一个简单的map()函数?就像这样:

var t = YourArray;
var u = t.map(function (a, i) { var g = {}; g[a.AGENDADOR] = a.TOTAL; return g; });

谢谢,但是它没有起作用,我以为我可以用“map”来完成,当然,你的代码比我的好。 - Magno Alberto
看看Roman的回答,使用reduce也应该非常好。 - Nils

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接