我有一个创建值对象的函数,但我在控制台日志中得到了这个:
x: Array[4]
0: undefined
1: NaN
2: undefined
3: NaN
length: 4
y: Array[4]
0: undefined
1: NaN
2: undefined
3: NaN
length: 4
该函数循环在一个由json编码的PHP文件创建的对象上:
var sdata = {"4":{"7":["1","7","2","2"]},"3":{"3":["2","8","1","1"]}};
我的功能是:
function populate_collisions(){
gcollision = {
x: [],
y: []
};
for(var key in sdata){
gcollision.x.push( sdata[key][0] );
gcollision.x.push( sdata[key][0] + (sdata[key][2]-1) );
gcollision.y.push( sdata[key][1] );
gcollision.y.push( sdata[key][1] + (sdata[key][3]-1) );
}
console.log(gcollision);
}
我很想知道为什么我会变得不确定和NaN?我该如何解决这个问题?
答案 0 :(得分:2)
你的“物体/阵列混合”是3D(3级深)。
var sdata = {
"4": {
"7": ["1", "7", "2", "2"]
},
"3": {
"3": ["2", "8", "1", "1"]
}
};
在第一项中,你得到键“4”,然后在它下面,一个键“7”,然后是你的数组。 you lacked an additional loop:
function populate_collisions() {
gcollision = {
x: [],
y: []
};
for (var key in sdata) {
for (var keyTwo in sdata[key]) {
gcollision.x.push(sdata[key][keyTwo][0]);
gcollision.x.push(sdata[key][keyTwo][0] + (sdata[key][keyTwo][2] - 1));
gcollision.y.push(sdata[key][keyTwo][1]);
gcollision.y.push(sdata[key][keyTwo][1] + (sdata[key][keyTwo][3] - 1));
}
}
console.log(gcollision);
}