0

arr1という配列とarr2という 2 番目の配列があります。どちらも動的に作成されます (つまり、arr2 はしばらく入るたびに異なり、arr1 は同じですが、arr2 新しい配列によって毎回埋められます)。

arr1のすべての位置に異なる配列を持たせたいのですが (この例では、arr2 は常に同じですが、気にしないでください)、どうすればこれを行うことができますか?

私はこの方法を試しました:

//Some context
arr1[x] = new Array();
arr2[y] = new Array();
while(j < 10){
  arr2[j] = j;
  j++;
}
while(x < 10){
  arr1[x] = [arr2]; //problem
  x++;
}


arr1[x] = new Array(otherArr.length);

arr1[x] = [arr2]  (?)

arr1[x] = arr2 (?)

arr1[x] = new Array(arr2.length)
arr1[x] = arr2 (?)
4

3 に答える 3

3
for(var i=0; i<arr1.length; i++)
  arr1[i] = arr2;

編集: for(var i=0; i<arr1.length; i++) arr1[i] = arr2.slice(0); 参照を使用する代わりに配列をコピーする場合に使用します。

于 2012-10-31T12:49:39.943 に答える
1

array1 の長さが 0 より大きい場合、このメソッドを使用して、array1 の各位置を array2 に置き換えることができます。

array1 = ["","",""]
array2 = [1,2,3]

for (var i=0; i<array1.length; i++)
  {
  array1[i] = array2;
  }
于 2012-10-31T12:49:38.747 に答える
0

arr21 つの「行」を後で変更しても他の行に影響を与えないように、テンプレートとして使用する場合:

var arr1 = [1,2,3];
var arr2 = [4,5,6];

for (var i=arr1.length;i--;) arr1[i] = arr2.concat(); // create a copy

この時点で、次のものに相当します。

var arr1 = [
  [4,5,6],
  [4,5,6],
  [4,5,6]
];

…変更arr1[0][0] = 0して見ることができるように:

[
  [0,5,6],
  [4,5,6],
  [4,5,6]
]

それ以外の

[
  [0,5,6],
  [0,5,6],
  [0,5,6]
]

ここでの他のいくつかの答えが引き起こすでしょう。

于 2012-10-31T12:56:44.380 に答える