多维数组javascript的总和

时间:2018-02-08 18:05:32

标签: javascript arrays sum

我想使用javascript使用forEach,map,reduce函数对每个子数组执行求和运算,这样最终我的输出应该如下所示:

sum = [8,13,22]

但我没有得到所需的输出。请在我出错的地方帮忙。谢谢。

var Data = [{"a":1,"b":2,"c":5},{"a":3,"b":4,"c":6},{"a":6,"b":7,"c":9}];
var newArr = [];
Data.forEach(function(item) { 
  item = item.reduce(function(a, b) {
    return a + b;
  });
  newArr.push([item]);
});
console.log(newArr);

2 个答案:

答案 0 :(得分:4)

您可以精确地映射总和值。

var data = [{ a: 1, b: 2, c: 5 }, { a: 3, b: 4, c: 6 }, { a: 6, b: 7, c: 9 }],
    result = data.map(o => Object.values(o).reduce((a, b) => a + b));

console.log(result);

给定代码的一些注释:

您无法使用reduce迭代对象,因为这仅适用于数组。要解决这个问题,您需要通过Object.values获取对象的值,然后可以迭代这些值。

然后返回总和而不将其包装在数组中。

var Data = [{"a":1,"b":2,"c":5},{"a":3,"b":4,"c":6},{"a":6,"b":7,"c":9}];
var newArr = [];
Data.forEach(function(item) { 
    var sum = Object.values(item).reduce(function(a, b) {
        return a + b;
    });
    newArr.push(sum);
});

console.log(newArr);

更好的解决方案是使用Array#map,因为数组的每个元素都需要一个值。

var data = [{"a":1,"b":2,"c":5},{"a":3,"b":4,"c":6},{"a":6,"b":7,"c":9}];
    newArr = data.map(function(item) { 
        return Object.values(item).reduce(function(a, b) {
            return a + b;
        });
    });

console.log(newArr);

答案 1 :(得分:0)

根据你的例子,Old way



var Data = [{"a":1,"b":2,"c":5},{"a":3,"b":4,"c":6},{"a":6,"b":7,"c":9}];
var newArr = [];
Data.forEach(function(object) {
  let sum = 0;
  for (var property in object) {
    if (object.hasOwnProperty(property)) {
        sum += object[property]
    }
 }
  newArr.push(sum);
});
console.log(newArr);