通过几个对象总结几个数组

时间:2014-06-13 08:14:43

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

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

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。

3 个答案:

答案 0 :(得分: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 时,请记住将基数指定为第二个参数。

答案 1 :(得分:0)

在您的代码中,您决不向数组中添加元素。你在做什么,这个:

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

答案 2 :(得分:0)

您已经两次声明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] 
相关问题