我有一个父对象,其中包含多个子对象。在每一个上,我都有一个数组,我想对这些值求和。
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。
答案 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]