【问题标题】:Sum array values in object of arrays对数组对象中的数组值求和
【发布时间】:2016-09-05 18:30:41
【问题描述】:

我正在寻找对数组对象中的位置求和。从本质上讲,每个数字代表一个费用项目的年度金额,我需要对每一年进行总结。该对象看起来像这样(见下文),结果应该是一个数组,它 = [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];
      });
    });

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

【问题讨论】:

    标签: javascript arrays angularjs multidimensional-array


    【解决方案1】:

    稍微不同的解决方案。

    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>');

    【讨论】:

      【解决方案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)

      【讨论】:

        猜你喜欢
        • 2022-12-04
        • 2022-11-19
        • 2021-08-09
        • 1970-01-01
        • 2015-11-28
        • 2018-06-22
        • 2016-08-19
        • 2020-06-22
        • 1970-01-01
        相关资源
        最近更新 更多