元の配列を変更せずに配列をソートするにはどうすればよいでしょうか? 質問する

元の配列を変更せずに配列をソートするにはどうすればよいでしょうか? 質問する

入力された配列をソートして返すソート関数が欲しいとしましょう。私は素朴にこれを試しました

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

おすすめ記事