[英]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] +=
:
工作守则
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.