2016-08-09 11 views
1

これは簡単な質問のようですが、これに関する多くの情報は見つかりません。array.sortの結果を別の変数に格納する

var array1 = new Array(4, 3, 1, 2, 0, 5); 
var array2 = array1; 
array2.sort(function(a, b) { 
    return a - b; 
}) 

予想される動作:配列2は、ソートされARRAY1 4.

実際の結果で始まる元の順序になっている。両方のアレイがソートされます。

array1を整理し、sort2の結果をarray2に保存している間、array1をどのように並べ替えることができますか?私はarray2 = array1をやっていると、それを参照するのではなく、変数をコピーすると思った。しかし、Firefoxのコンソールでは、両方の配列がソートされて表示されます。

+3

'VARの配列2 = array1.slice(); ' – Tushar

+0

元の配列をコピーするのではなく、元の配列を参照するデフォルトの動作はなぜですか? – tomysshadow

+0

http://stackoverflow.com/questions/7486085/copying-array-by-value-in-javascriptいくつかのメソッドは参照を変更していますが、新しい配列を作成するものもあります。配列のドキュメントを確認してください。 –

答えて

0

You can copy a array with slice method

var array1 = new Array(4, 3, 1, 2, 0, 5); 
var array2 = array1.slice(); 
+2

これは、OPの数値配列では問題ないが、オブジェクトの配列では十分ではないかもしれない浅いコピーを作成することに注意してください。 – nnnnnn

1

var array2 = array1;これはオブジェクトへの新しい参照を作成しているためです。したがって、array2に対する操作は、基本的に同じオブジェクトなので、array1に影響します。

JSはpropner clone関数/メソッドを提供するので、この広く採用workarroundをしようとしません。

var array1 = new Array(4, 3, 1, 2, 0, 5); 
var array2 = JSON.parse(JSON.stringify(array1)); 
array2.sort(function(a, b) { 
    return a - b; 
}); 

はそれが役に立てば幸い:)

+0

* "あなたはオブジェクトの浅いコピーを作っています" * - いいえ、オブジェクトのコピーをまったく作っていないのであれば、同じオブジェクトに対する2番目の参照だけです。 – nnnnnn

+0

@nnnnnnこれはより正確です – alex030293

関連する問題