1

これは、JavaScript の仕組みの一部を理解していないだけだと思います。配列があるとしましょう。arr1それを と呼び、6 つの int が含まれてい [1,2,3,4,5,6]ます。新しい配列を作成する場合:

var arr2 = arr1

( の変更されていないコピーを維持する目的でarr1)、変更arr1すると、変更が に反映されarr2ます。

基本的に、私は操作してarr1います。テスト目的で、変更されていない のコピーがarr1必要だったので、完了したら、Web ページで両方を console.log アウトして、それらの違いを確認できます。しかし、 で変更を加えるとarr1、その変更が に反映されarr2ます。

なぜこれが起こるのか、そしておそらくそれを回避する方法を誰かが説明できますか? 修正方法よりも、なぜこれが起こるのかに興味があります。

1 つの方法はarr2、別の配列を作成し、for ループを使用してarr1のデータを入力することです。

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

ただし、配列が巨大な場合、コストが高くなる可能性があります。どんな助けでも大歓迎です。

4

3 に答える 3

8

非プリミティブ (配列など) を割り当てる場合、コピーは作成されません。同じ配列への別の参照を作成しています。

配列をコピーする場合:

var arr2 = arr1.slice();
// or
var arr2 = arr1.concat();

詳細: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array

于 2012-11-21T18:44:50.947 に答える
3

オブジェクトは値渡しではなく参照渡しです。

配列のコピーを作成するには、次を試してください。

var arr2 = arr1.slice(0);
于 2012-11-21T18:44:50.200 に答える
1

Javascriptは参照によって配列を処理しているため、arr1arr2は実際には同じ配列を指しています。

おそらくやりたいことは、アレイのクローンを作成することです。slice

var arr2 = arr1.slice(0);
于 2012-11-21T18:47:24.500 に答える