我有一个对象,它将im转换为一组将被用来存储哪些坐标被“占用”的坐标。在我的数组中缺少结果
我以为我有它的工作,但通过console.log进一步检查数组缺少一些公平的结果。
所以这基本上是我对象:
var sdata = {"4":{"7":["1","7","3","3"]}};
在口头上是这样的:
var sdata = {"X":{"Y":["ID","ID","Width","Height"]}
忽略ID为这个,因为他们是无关的......但我尝试使用此数据使我有X和Y +额外的X和Y坐标相关的瓷砖尺寸的宽度和高度。
想象一下,如果将4:7的对象设置为3乘3维,那么会导致这9个网格引用存在。
[4:7], [5:7], [6,7]
[4:8], [5:8], [6,8]
[4:9], [5:9], [6:9]
所以我的函数来创建坐标为:
function populate_collisions() {
for (var X in sdata) {
X = parseInt(X);
for (var Y in sdata[X]) {
Y = parseInt(Y);
width = parseInt(sdata[X][Y][2]);
height = parseInt(sdata[X][Y][3]);
for (i=X; i!= X+width; i++) {
if(typeof gcollision[i] == 'undefined') {
gcollision[i] = new Array();
}
gcollision[i][Y] = 1
for (j=Y; j!=Y+height; j++) {
if(typeof gcollision[X] == 'undefined'){
gcollision[X] = new Array();
}
gcollision[X][j] = 1
}
}
}
}
}
但由于即时得到这个结果对我的阵列我的逻辑一定是错的:
[4] [7] = 1
[4] [8] = 1
[4] [9] = 1
[5] [7] = 1
[6] [7] = 1
任何想法,为什么我在想念额外的数据?
你期望得到什么? – 2012-04-07 02:22:41
我不明白你的目标为什么这么复杂。 Surly只需标记属性就更简单了:'sdata = {x:4,y:7,id0:1,id1:7,w:3,h:3};'那么你可以抛弃'parseInt'和for..in东西。直接属性访问应该更快,并且不会被某人向Object.prototype添加可枚举属性(不太可能如此),并且您的对象结构更加灵活。 – RobG 2012-04-07 02:27:20
@RobG它在PHP中生成像这样然后json编码被传递给JS之前:http://www.paste.to/Mzc4MTU1 – Sir 2012-04-07 02:32:32