繁体   English   中英

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

[英]Sum up several array through several objects

我有一个父母的对象,其中包含几个孩子的对象。 在他们每个人身上,我都有一个数组,我想对这些值求和。

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。

您的代码有一些问题。

  • 每次进入内循环时,您都将清除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时,请始终记住将基数指定为第二个参数。

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

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

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

小提琴

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] 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM