【问题标题】:Sum up several array through several objects通过几个对象总结几个数组
【发布时间】:2014-06-13 08:14:43
【问题描述】:

我有一个父对象,其中包含多个子对象。在它们中的每一个上,我都有一个数组,我想对这些值求和。

dataArray = {
    "dribbble":{
        "username":"JeremDsgn",
        "followers":242,
        "diff":{
            "data":[230, 231, 236, 238, 239, 239, 242]
        }
    },
    "twitter":{
        "username":"jeremdsgn",
        "followers":"592",
        "diff":{
            "data":[576, 578, 578, 581, 584, 589, 592]
        }
    },
    "behance":{
        "username":"JeremDsgn",
        "followers":17,
        "diff":{
            "data":[16, 15, 15, 16, 16, 16, 17]
        }
    }
}

所以就我而言,我想创建一个按值求和的总数组。

总计 = [822, 824, 829, 835, 839, 844, 851]

我有两个循环来遍历对象和数组,但是没有用。

for (var site in dataArray) {
  var total = [];

  for (var i = 0; i < dataArray[site].diff.data.length; i++) {    
    total += parseInt(dataArray[site].diff.data[i]);
  }
}

但它不影响每个索引值的数组值,它返回 NaN。

【问题讨论】:

    标签: javascript arrays object for-loop for-in-loop


    【解决方案1】:

    您的代码存在一些问题。

    • 每次进入内部时,您都在清除 total 数组 环形。要解决此问题,请在两个循环之外声明数组。

    • 您需要使用 7 个索引(全部从零开始)初始化 total

    • 需要在指定索引处增加total,即total[i] +=

    JSFiddle

    工作代码

    var total = [0,0,0,0,0,0,0];
    
    for (var site in dataArray) {
        for (var i = 0; i < dataArray[site].diff.data.length; i++) {
            total[i] += parseInt(dataArray[site].diff.data[i], 10);
        }
    }
    
    console.log(total) // [822, 824, 829, 835, 839, 844, 851]
    

    另外:使用parseInt时,请务必记住将基数指定为第二个参数。

    【讨论】:

      【解决方案2】:

      在您的代码中,您绝不会向数组添加元素。你正在做的是,这个:

      total = [];
      total += (number);
      

      在 javascript 中,如果将数字添加到数组中,则会得到该数组的字符串表示形式:

      [] + 10 === "10"; // Evaluates to true
      

      这是因为数组另外被转换为字符串,因此空数组被转换为空字符串,然后将数字添加到其中。此外,您在第一个循环中声明主数组。这将导致它在每次迭代元素时擦除数组。第二种情况也发生了同样的事情。要解决这个问题,您需要做的是:

      var total = [];
      
      for (var site in dataArray) {
          var sub_total = 0;
      
          for (var i = 0; i < dataArray[site].diff.data.length; i++) {
              sub_total += parseInt(dataArray[site].diff.data[i]);
          }
      
          total.push(sub_total);
      }
      

      【讨论】:

        【解决方案3】:

        您声明了两次total,并尝试在数组上使用+=。相反,您应该定位total 数组的所需索引。

        Fiddle

        var total = [];
        
        for (var site in dataArray) {
          for (var i = 0; i < dataArray[site].diff.data.length; i++) {
            if(typeof total[i] == 'undefined'){
                total[i] = 0;      
            }
            total[i] += parseInt(dataArray[site].diff.data[i]);
          }
        }
        

        输出

        [822, 824, 829, 835, 839, 844, 851] 
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-02-07
          • 2015-03-23
          • 2014-03-23
          • 1970-01-01
          • 2013-07-01
          • 2018-12-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多