我正在尝试创建一个二维数组,但我收到了这个错误。
我循环一个对象并尝试分配它们,但它不会让我为第二个维度赋值。
这就是我所拥有的:
//this is globally set
var gcollision = new Array();
function create() {
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++) {
//error occurs here "Uncaught TypeError: Cannot set property '3' of undefined"
gcollision[i][Y] = 1
for (j = Y; j != Y + height; j++) {
gcollision[X][j] = 1
}
}
}
}
如何正确设置值?
EDIT sdata看起来像这样:
var sdata = {"4":{"7":["1","7","3","3"]},"3":{"3":["2","8","1","1"]}};
答案 0 :(得分:2)
//this is globally set
var gcollision = new Array();
function create(){
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
}
}
}
}
基本上,即使你创建了数组,那些索引还不存在,所以你不能将它们作为数组引用它们,直到你定义它们为止。
如果您更好地设置for循环,则不必执行isset,只需在首次访问它的内循环之前创建gcol[index] = Array();
。
答案 1 :(得分:1)
首先需要初始化第一级数组。
function create() {
for (var X in sdata) {
X = parseInt(X);
gcollision[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++) {
gcollision[i][Y] = 1;
for (j = Y; j < Y + height; j++) {
gcollision[X][j] = 1;
}
}
}
}