【问题标题】:How can I add each element of one array to corresponding elements in other arrays with javascript or angular如何使用javascript或角度将一个数组的每个元素添加到其他数组中的相应元素
【发布时间】:2014-07-28 20:50:23
【问题描述】:

我需要将数组的元素按顺序添加在一起,与 [How can I add each element of one array to another one's corresponding element using a ParallelStream? 的问题非常相似,但我使用的是 javascript 和 angular。我的数组可以包含最多 31(天)的任意数量的元素,但它们在每个数据对象中始终是相同数量的元素。

$scope.test31days = {
  "change_series": [
    { "data": [0,0,0,2,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,2,0,0],
      "name": "EMERGENCY",
      "color": "#904040"},
    { "data": [0,1,3,0,0,0,0,1,2,3,3,0,0,0,2,1,1,1,0,0,1,1,3,3,1,0,0,1,2,2,0],
      "name": "MINOR",
      "color": "#333"},
    { "data": [0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0],
      "name": "MAJOR",
      "color": "#666"}
  ],
  "change_title": "CHANGES"
}

我的控制台输出告诉我我正确地分离了元素(在某种程度上),但是当我使用 if/else if 语句运行它时,我的浏览器崩溃了,所以我知道我搞砸了。

$scope.getTotalChanges = function(){
  var series = $scope.test31days.change_series;
  var arry = [];

  for(var i = 0; i < series.length; i++){
    // console.log('change_series loop #', i);
    // console.log('change_series.data length', series[i].data.length);

    var seriesData = series[i].data;
    // console.log('series[i].name', series[i].name)        
    // console.log('seriesData', seriesData)

    for(var j = 0; j < seriesData.length; j++){
      console.log('For inner #', j);
      console.log('seriesData #', seriesData[j]);

      if (j = 0) {
        arry = seriesData;
      } else if (j > 0) {
        arry[j] += seriesData[j]
      };
    }
  }

  // return series;
  console.log('arry ', arry);
  return arry;
};

我的最终目标是拥有一个 31(天)的数据数组

【问题讨论】:

  • 不应该if (j = 0)if (j == 0)
  • 另外,尝试使用 angular 内置的 for 循环... angular.forEach(series, function(value, index){ ... 你的逻辑在这里 ... });

标签: javascript arrays json angularjs angularjs-scope


【解决方案1】:
var series = $scope.test31days.change_series;
var dataLength = series[0].data.length;
var result = Array.apply(null, new Array(dataLength)).map(Number.prototype.valueOf,0); //initialize result array with zeros

for(var i = 0; i < series.length; i++) {
  for(var j = 0; j < dataLength; j++) {
    result[j] += series[i].data[j];
  }
}

【讨论】:

  • 我尝试将其插入到我的指令中,并且似乎 var result = new Array(dataLength).map(Number.prototype.valueOf, 0); 正在返回一个 NaN 数组。谷歌搜索告诉我这是来自 Number 的非法号码的结果。还有其他想法吗?
  • 那行应该是:var result = Array.apply(null, new Array(dataLength)).map(Number.prototype.valueOf, 0);
  • 啊哈!非常感谢!
猜你喜欢
  • 2013-05-28
  • 1970-01-01
  • 2014-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-03
  • 1970-01-01
相关资源
最近更新 更多