入力された配列のソートされたコピーを返すソート関数が必要だとしましょう。私は単純にこれを試しました
function sort(arr) {
return arr.sort();
}
私はこれをテストしました。これは、私のsortメソッドが配列を変更していることを示しています。
var a = [2,3,7,5,3,7,1,3,4];
sort(a);
alert(a); //alerts "1,2,3,3,3,4,5,7,7"
私もこのアプローチを試しました
function sort(arr) {
return Array.prototype.sort(arr);
}
しかし、それはまったく機能しません。
これを回避する簡単な方法はありますか?できれば、自分の並べ替えアルゴリズムを手動でローリングしたり、配列のすべての要素を新しい要素にコピーしたりする必要がない方法が望ましいでしょうか?
1
配列のディープコピーを作成し、代わりに並べ替えます。
—
evanmcdonnal 2012年
@evanmcdonnal配列内のすべての項目の複製ではなく、並べ替えだけが必要な場合は、浅いコピーで十分な場合があります。
—
Kekoa、2012年
.sortthis値は配列である必要があるため、最後のスニペットが機能する.sort.call(arr)ためには、問題は解決しませんが、
@Kekoaそうですね。要素自体ではなく要素の順序を変更するだけの場合は、より多くのメモリを消費する必要はありません。
—
evanmcdonnal
zzzzBovの方法は魅力のように働いています!stackoverflow.com/a/9592774/7011860
—
サメットM.