我有一个包含对象的多维数组,需要使用javascript计算每列的总和

我有一个包含对象的多维数组,需要使用javascript计算每列的总和,javascript,angularjs,json,multidimensional-array,sum,Javascript,Angularjs,Json,Multidimensional Array,Sum,我在angularjs工作。我得到了json格式的响应。json是 "vals": [{ "season": "SUMMER", "usage": [ ["PEAK", "1.000", "2.000", "3.000", "4.000", "5.000", "6.000", "7.000", "8.000", "9.000"], ["NORMAL", "10.000", "11.000", "12.000", "1

我在angularjs工作。我得到了json格式的响应。json是

"vals": [{
        "season": "SUMMER",
        "usage": [
            ["PEAK", "1.000", "2.000", "3.000", "4.000", "5.000", "6.000", "7.000", "8.000", "9.000"],
            ["NORMAL", "10.000", "11.000", "12.000", "13.000", "14.000", "25.000", "16.000", "17.000", "18.000"],
            ["OFF-PEAK", "19.000", "20.000", "21.000", "22.000", "23.000", "24.000", "25.000", "26.000", "27.000"]
        ]
    }, {
        "season": "MONSOON",
        "usage": [
            ["PEAK", "28.000", "29.000", "30.000", "31.000", "32.000", "33.000", "34.000", "35.000", "36.000"],
            ["NORMAL", "37.000", "38.000", "39.000", "40.000", "41.000", "42.000", "43.000", "44.000", "45.000"],
            ["OFF-PEAK", "46.000", "47.000", "48.000", "49.000", "50.000", "51.000", "52.000", "53.000", "54.000"]
        ]
    }, {
        "season": "WINTER",
        "usage": [
            ["PEAK", "55.000", "56.000", "57.000", "58.000", "58.000", "59.000", "60.000", "61.000", "62.000"],
            ["NORMAL", "63.000", "64.000", "65.000", "66.000", "67.000", "68.000", "69.000", "70.000", "71.000"],
            ["OFF-PEAK", "72.000", "73.000", "74.000", "75.000", "76.000", "77.000", "78.000", "79.000", "80.000"]
        ]
    }]
我必须计算每列的值,并将其放入一个新数组,即

[(1.000+10.000+19.000+28.000+37.000+46.000+55.000+63.000+72.000),(2.000+11.000+20.000+29.000+38.000+47.000+56.000+64.000+73.000),(3.000+12.000+21.000+30.000+39.000+48.000+57.000+65.000+74.000),(4.000+13.000+22.000+31.000+40.000+49.000+58.000+66.000+75.000).....]
我这样做了,得到了期望的结果,但我在计算总数时提到了列数,但列可以是动态的。我惭愧地说我无法解决它。如果有任何方法使其动态化,请提供帮助。或者如果有更好的方法,请分享。我为5列工作,但给定json有9列。我的代码是

$scope.ctrlFn= function(){
  var raw = angular.copy($scope.subStationsData);
var calcArray = raw.vals;
$scope.grossEnergy = raw.vals;
var k1Array = [];
var k2Array = [];
var k3Array = [];
var k4Array = [];
var k5Array = [];
$scope.totalArray = [];
function getSum(total, num) {
    return total + num;
}
for (var i=0; i<calcArray.length; i++) {
  for (var j=0; j<(calcArray[i].usage.length)-1; j++){
      for (var k = 1; k < calcArray[i].usage[j].length; k++) {
          console.log('j', j)
          console.log('k', k)
          console.log('calcArray[j].usage[k]: ',calcArray[i].usage[j][k]);
          if(k==1){
            k1Array.push(calcArray[i].usage[j][k]);
            console.log('k1Array: ',k1Array);
          }
          if(k==2){
            k2Array.push(calcArray[i].usage[j][k]);
            console.log('k1Array: ',k2Array);
          }
          if(k==3){
            k3Array.push(calcArray[i].usage[j][k]);
            console.log('k1Array: ',k3Array);
          }
          if(k==4){
            k4Array.push(calcArray[i].usage[j][k]);
            console.log('k1Array: ',k4Array);
          }
          if(k==5){
            k5Array.push(calcArray[i].usage[j][k]);
            console.log('k1Array: ',k5Array);
          }
      }
  }
}
var col1 = k1Array.map(Number).reduce(getSum);
var col2 = k2Array.map(Number).reduce(getSum);
var col3 = k3Array.map(Number).reduce(getSum);
var col4 = k4Array.map(Number).reduce(getSum);
var col5 = k5Array.map(Number).reduce(getSum);
$scope.totalArray.push(col1);
$scope.totalArray.push(col2);
$scope.totalArray.push(col3);
$scope.totalArray.push(col4);
$scope.totalArray.push(col5);
console.log('totalArray: ',$scope.totalArray);
$scope.$apply();
}

您可以使用arrayreduce保存列的每个和,并使用arrayforEach迭代每个数组

var数据={VAL:[{季节:夏季,使用量:[峰值,1.000,2.000,3.000,4.000,5.000,6.000,7.000,8.000,9.000],[正常,10.000,11.000,12.000,13.000,14.000,25.000,16.000,17.000,18.000],[非峰值,19.000,20.000,21.000,22.000,23.000,24.000,25.000,26.000],季节:季风,使用量:[[峰值,28.000,29.000,30.000,31.000,32.000,33.000,34.000,35.000,36.000],[正常,37.000,38.000,39.000,40.000,41.000,42.000,43.000,44.000,45.000],[非峰值,46.000,47.000,48.000,49.000,50.000,51.000,52.000,53.000,54.000],{季节:冬季,用法:][峰值,55.000,56.000,57.000,58.000,58.000,58.000,59.000,60.000,61.000,62.000],[正常,63.000,64.000,65.000,66.000,67.000,68.000,69.000,70.000,71.000],[非峰值,72.000,73.000,74.000,75.000,76.000,77.000,78.000,79.000,80.000]}, 结果=data.vals.reducer,o=>{ o、 usage.forEacharr=>{ arr.slice1.forEachv,i=>{ r[i]=r[i]| | 0++v; }; }; 返回r; },[]; console.logresult; 变量数据={VAL:[{ 季节:夏季, 用法:[ [峰值,1.000,2.000,3.000,4.000,5.000,6.000,7.000,8.000,9.000], [正常,10.000,11.000,12.000,13.000,14.000,25.000,16.000,17.000,18.000], [非繁忙时段,19.000,20.000,21.000,22.000,23.000,24.000,25.000,26.000,27.000] ] }, { 季节:季风, 用法:[ [峰值,28.000,29.000,30.000,31.000,32.000,33.000,34.000,35.000,36.000], [正常,37.000,38.000,39.000,40.000,41.000,42.000,43.000,44.000,45.000],, [非高峰期,46.000,47.000,48.000,49.000,50.000,51.000,52.000,53.000,54.000] ] }, { 季节:冬季, 用法:[ [峰值,55.000,56.000,57.000,58.000,58.000,59.000,60.000,61.000,62.000], [正常,63.000,64.000,65.000,66.000,67.000,68.000,69.000,70.000,71.000],, [非高峰期,72.000,73.000,74.000,75.000,76.000,77.000,78.000,79.000,80.000] ] }]}; var result=data.vals.reducer,o=>{ o、 用法.forEacha=>{ a、 切片1.forEachv,i=>{ r[i]=r[i]| | 0+v; }; }; 返回r; },[]; console.logresult;