入力された配列をソートして返すソート関数が欲しいとしましょう。私は素朴にこれを試しました
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
配列をソートする前にコピーする必要があります。es6 を使用する方法の 1 つ:
const sorted = [...arr].sort();
配列リテラルとしてのスプレッド構文 (mdn からコピー):
var arr = [1, 2, 3];
var arr2 = [...arr]; // like arr.slice()
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator