数组对象中的Sum数组值

时间:2016-05-10 16:35:33

标签: javascript arrays angularjs multidimensional-array

我正在寻找数组对象中的位置。基本上,每个数字代表费用项目的年度金额,我需要每年对这些数字求和。对象看起来像这样(见下文),结果应该是一个数组= [1500,1900,2400]给定下面的对象。

x = [{
      "HVAC": [100, 200, 300, 400],
      "foundation": [500, 600, 700, 800],
      "roof": [900, 1000, 1100, 1200]
    }];

如果数组未命名,而是看起来像:

x = [
          [100, 200, 300, 400],
          [500, 600, 700, 800],
          [900, 1000, 1100, 1200]
        ];

然后这个功能会做我想要的(感谢这篇文章Sum array of arrays (matrix) vertically efficiently/elegantly):

 $scope.reserveTotals = x.reduce(function(a, b) {
      return a.map(function(v, i) {
        return v + b[i];
      });
    });

就目前而言,我需要保持原始结构,并且正在努力使该功能适应我所需要的。任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:3)

略有不同的解决方案。

var x = { "HVAC": [100, 200, 300, 400], "foundation": [500, 600, 700, 800], "roof": [900, 1000, 1100, 1200] },
    result = Object.keys(x).reduce(function (r, k) {
        x[k].forEach(function (a, i) {
            r[i] = (r[i] || 0) + a;
        });
        return r;
    }, []);

document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');

答案 1 :(得分:2)

您可以使用for...in循环和reduce

x = [{
  "HVAC": [100, 200, 300, 400],
  "foundation": [500, 600, 700, 800],
  "roof": [900, 1000, 1100, 1200]
}];

for(var p in x[0]) {
  x[0][p] = x[0][p].reduce((a, b) => { return a + b});
}

console.log(x)