0

我正在尝试创建一个二维数组,但出现此错误。

我循环一个对象并尝试分配它们,但它不会让我为第二维分配一个值。

这就是我所拥有的:

//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
                }
            }
        }
    }

如何使它正确设置值?

编辑 sdata 如下所示:

var sdata = {"4":{"7":["1","7","3","3"]},"3":{"3":["2","8","1","1"]}};
4

2 回答 2

3
//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();第一次访问它的内部循环之前创建右边。

于 2012-04-06T18:21:08.960 回答
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;
                }
            }
        }
    }
于 2012-04-06T18:21:09.927 回答