2011-02-03 8 views
0

TilesArray.tilesの出力が間違っています。アラート(TilesArray.array);無作為化された数字で正しい出力が得られますが、最終的にTilesArray.tilesは各インデックスに同じ配列を持ちます。JavaScript配列に問題があります

for (i = 0; i < 200; i++) { 
    for (j = 0; j < 200; j++) { 
     TilesArray.array[j] = (Math.round(Math.random() * 499 + 1)); 
    } 
    alert(TilesArray.array); 
    TilesArray.tiles[i] = TilesArray.array; 
} 

問題を解決する方法はありますか?

答えて

4

アレイをコピーする必要があります。あなたが継続的にtiles同じ配列にの参照を追加しているslice()

for (i = 0; i < 200; i++) { 
    for (j = 0; j < 200; j++) { 
     TilesArray.array[j] = (Math.round(Math.random() * 499 + 1)); 
    } 
    alert(TilesArray.array); 
    TilesArray.tiles[i] = TilesArray.array.slice(0); 
} 
+0

をMath.random()が本当にランダムではないという事実を – egze

3

で行うことができます。これを回避するには、外側ループの各繰り返しで新しい配列を作成します。

for (i = 0; i < 200; i++) { 
    TilesArray.array = []; // This is the line 
    for (j = 0; j < 200; j++) { 
     TilesArray.array[j] = (Math.round(Math.random() * 499 + 1)); 
    } 
    alert(TilesArray.array); 
    TilesArray.tiles[i] = TilesArray.array; 
} 

さらに良いでしょうか?あなたのtiles配列(それは心配する一つ少なく変数です)に直接、すべてを追加します。各反復で

for (i = 0; i < 200; i++) { 
    TilesArray.tiles[i] = []; 
    for (j = 0; j < 200; j++) { 
     TilesArray.tiles[i][j] = (Math.round(Math.random() * 499 + 1)); 
    } 
} 
1

、新しいランダムな値を使用してTilesArray.arrayを記入し、TilesArrayでこのユニークな配列への参照を格納します。タイル[i]。しかし、ランダムな値の配列は常に同じです。同じ配列へのポインタがたくさんあるだけです。

あなたは各反復で新しい配列に割り当てる必要があります、実際には、私は別の問題があると思い

for (i = 0; i < 200; i++) { 
    TilesArray.array = []; 
    for (j = 0; j < 200; j++) { 
     TilesArray.array[j] = (Math.round(Math.random() * 499 + 1)); 
    } 
    alert(TilesArray.array); 
    TilesArray.tiles[i] = TilesArray.array; 
} 
関連する問題