javascript求和多维数组

标签 javascript arrays multidimensional-array

我有这个多维数组,我需要合并相等的字段并对总和值求和

var data = [
      [
        {field: 123, sum: 100},
        {field: 345, sum: 98}
      ],[
        {field: 123, sum: 12},
        {field: 345, sum: 20}
      ]
    ];

所以从这个数组中我需要一个像这样的新数组。

var newArray = [
   {field: 123, sum: 112},
   {field: 345, sum: 118}
];

这是我的代码。

var newArray = [];
for(var i = 0; i < data.length; i++) {
  for(var j = 0; j < data[i].length; j++) {
    var matched = false;
    for(var c = 0; c < newArray.length; c++) {
      if(data[i][j].field == newArray[c].field) {
        matched = true;
        newArray[c].sum + data[i][j].sum;
      }
    }
    console.log(data[i][j]);
    if(!matched) {
      newArray.push(data[i][j]);
    }
  }
}

但我没有得到正确的值。 console.log(newArray);

最佳答案

在函数式编程中,这将是一个经典的 map-reduce 问题,或者更具体地说,是一个按键归约。

如果您正在使用 underscore ,你可以这样做:

var op = _.chain(data)
 //first put it all in one array
 .flatten()
 //then group by the field
 .groupBy(function(item){return item.field;})
 //then sum up all of the "sum" properties
 .mapObject(function(val,key){
    return _.reduce(val, function(total,sum){
        return total + sum.sum;
    },0);
 })
 //then map it back into our original data structure
 .pairs()
 .map(function(item){
    return {field: item[0], sum: item[1]};
 });

关于javascript求和多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30667121/

相关文章:

c++ - 数组初始化知识

c++ - cocos2d-x:来自另一个类的 CRUD 二维数组

javascript - 如何在javascript中访问多维对象?

javascript - 用实际变量名/字符串替换数组映射变量?

javascript - 如何循环一个 div 并使用正则表达式添加一个类?

javascript - 如何从数组对象数组中获取特定属性?

python - 将数组广播到不同的形状(添加 "fake"维度)

javascript - 路由 asp.net mvc 中的 AJAX 错误

javascript - 每次重新渲染时都会计算 useState 和 useRef 初始值

C-将矩阵传递给没有非常量列值的函数