0

2D配列を埋めたいのですが、JavaScriptで次のコードを使用しています。

n=2; //rows
m=3; //columns
z=0;
array1=[];
for(i=0;i<n;i++){
    for(j=0;j<m;j++){
        array1[i]=[];
        array1[i][j] = z;
        console.log(i+","+j+"="+z); //debug
        z++;
    }

}

console.log(array1);

しかし、この期待される結果を得る代わりに、

[[0, 1, 2], [3, 4, 5]]

私は得る:

[[undefined, undefined, 2], [undefined, undefined, 5]]

どうして!?正しい最後の項目(ここでは2と5)を除いて、各「内部」配列のすべての項目が未定義になっている理由がわかりません。

i,j各ペアと割り当てられた値をログに記録するデバッグステップを作成しましたが、毎回z正しいペア値を取得します(i,j=z)

0,0=0
0,1=1
0,2=2
1,0=3
1,1=4
1,2=5

だから、私はarr[i][j]=z毎回を使用して配列を正しく埋めていると思いますが、なぜそれらの場合に未定義になるのですか?どちらの場合も構文のarr=new Array()代わりに使用してみましたが、同じ結果になりました。arr=[]

何か案は?些細なエラーになることはほぼ間違いありませんが、何が悪いのかわかりません。

ありがとう。

4

2 に答える 2

7

ループの反復ごとに空の配列を再初期化します。

array1[i]=[];

の値ごとに1回だけこれを実行する必要がある場合i。初期化を最も内側のループの外に移動します。

于 2013-01-24T23:17:13.367 に答える
0

これがどうあるべきかです

n=2; //rows
m=3; //columns
z=0;
array1=[];
for(i=0;i<n;i++){
    array1[i]=[];
    for(j=0;j<m;j++){
        array1[i].push(z); // Here is my change
        console.log(i+","+j+"="+z); //debug
        z++;
    }

}
于 2013-01-24T23:17:19.523 に答える