Array.prototype.toSorted()

toSorted()Array インスタンスのメソッドで、 sort() メソッドに対応するコピーメソッドです。これは、要素を昇順にソートした新しい配列を返します。

構文

js
toSorted()
toSorted(compareFn)

引数

compareFn 省略可

ソート順を定義する関数を指定します。省略した場合は、配列の要素を文字列に変換し、 Unicode コードポイントの値に従って並べ替えます。

a

比較する最初の要素です。

b

比較する 2 番目の要素です。

返値

要素を昇順にソートした新しい配列です。

解説

compareFn 引数の情報については sort() を参照してください。

疎配列が使用された場合、 toSorted() メソッドは空のスロットを undefined という値があるものとして反復処理します。

toSorted() メソッドは汎用です。 this の値が length プロパティを持っており、整数のキーのプロパティがあることのみを期待します。

配列のソート

js
const months = ["Mar", "Jan", "Feb", "Dec"];
const sortedMonths = months.toSorted();
console.log(sortedMonths); // ['Dec', 'Feb', 'Jan', 'Mar']
console.log(months); // ['Mar', 'Jan', 'Feb', 'Dec']

const values = [1, 10, 21, 2];
const sortedValues = values.toSorted((a, b) => a - b);
console.log(sortedValues); // [1, 2, 10, 21]
console.log(values); // [1, 10, 21, 2]

他の利用例は、 sort() を参照してください。

疎配列における toSorted() の使用

空のスロットは値が undefined であるかのようにソートされます。これらは常に配列の末尾にソートされ、 compareFn は呼び出されません。

js
console.log(["a", "c", , "b"].toSorted()); // ['a', 'b', 'c', undefined]
console.log([, undefined, "a", "b"].toSorted()); // ["a", "b", undefined, undefined]

配列以外のオブジェクトに対する toSorted() の呼び出し

toSorted() メソッドは thislength プロパティを読み取ります。そして、length - 1 から 0 までの整数のキーを持つ各プロパティを降順に訪れ、現在のプロパティの値を配列の末尾に追加して返します。

js
const arrayLike = {
  length: 3,
  unrelated: "foo",
  0: 5,
  2: 4,
  3: 3, // length が 3 なので toSorted() からは無視される
};
console.log(Array.prototype.toSorted.call(arrayLike));
// [4, 5, undefined]

仕様書

Specification
ECMAScript Language Specification
# sec-array.prototype.tosorted

ブラウザーの互換性

BCD tables only load in the browser

関連情報