1. ホーム
  2. ジャバスクリプト

[解決済み】元の配列を変異させずに配列を並べ替えるには?

2022-03-24 17:49:49

質問

入力された配列のソートされたコピーを返すソート関数が欲しいとします。私は素朴に次のように試してみました。

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);
}

が、全く機能しない。

できれば、独自のソートアルゴリズムを手作業で作成したり、配列のすべての要素を新しい配列にコピーしたりする必要がないような、簡単な方法はないでしょうか?

どのように解決するのですか?

ソートする前に、配列をコピーする必要があります。es6を使った一つの方法です。

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