嵌套循环的问题

var obj = {
  a1 : {key1: 50, key2:60, key3:0},
  a2 : {key1: 0, key2:60, key3:0},
  a3 : {key1: 50, key2:0, key3:0},
  a4 : {key1: 50, key2:60, key3:0}
 }

var arr = [];

for(var i in obj) {
 for(var j in obj[i] ) {
  arr[j] += obj[i][j];
 }
}
console.log(arr);

控制台打印
我想取得a1,z2,z3,z4的key1(key2,key3,key4)值的和,现在打印出来的显示NaN了是怎么回事?

阅读 3k
3 个回答

因为每一个 arr[j] 都没有初始值

应该这样:

arr[j] = arr[j] || 0;
arr[j] += obj[i][j];

而且 arr 不应该为数组:

var arr = {};

arr[j]初值是undefined,undefined+数字得到了NaN,给arr[j]一个初始值0,或者累加的时候处理一下undefined的情况

var obj = {
  a1 : {key1: 50, key2:60, key3:0},
  a2 : {key1: 0, key2:60, key3:0},
  a3 : {key1: 50, key2:0, key3:0},
  a4 : {key1: 50, key2:60, key3:0}
 }

var arr = [];
arr['key1'] = 0;
arr['key2'] = 0;
arr['key3'] = 0;

for(var i in obj) {
 for(var j in obj[i] ) {
  arr[j] += obj[i][j];
 }
}
console.log(arr);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题