0

2次元配列を作成しようとしていますが、このエラーが発生します。

オブジェクトをループして割り当てようとしましたが、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++) {
                //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();最初にアクセスされる内側のループの直前に the を作成するだけで済みます。

于 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 に答える