😄この投稿は、codingeverybody.jpのコンテンツをもとに作成しています。
定義と使い方
配列のsort()関数は、与えられた 元の配列の要素をソートします。
特徴
- デフォルトのソート順は、各要素を文字列に変換した後、**Unicodeコードポイント**順に従います。
- 必要に応じて**コールバック関数**を渡し、ソート基準を指定することも可能です。
- この関数は、与えられた元の配列を直接修正し、新しい配列を返しません。
基本例
/* 基本のソート:文字列の配列をUnicodeコードポイント順にソートする例 */
const enStrings = ["d", "b", "c", "a"];
enStrings.sort();
console.log(enStrings); // ["a", "b", "c", "d"]
/* コールバック関数を使用して数値の大きさ基準で昇順にソートする例 */
const numbers = [1, 4, 1000, 10, 31];
function compareNumbers(a, b) {
return a - b;
}
numbers.sort(compareNumbers);
console.log(numbers); // [1, 4, 10, 31, 1000]
構文
arr.sort();
arr.sort(compareFunction);
戻り値
ソートされた配列を返します。戻り値は変更された元の配列自体です。新しい配列は返しません。
使用上の注意事項
sort()関数のデフォルトのソートは、各要素を文字列に変換した後、**Unicodeコードポイント**値のソート順に従います。必要に応じてコールバック関数を渡し、ソート基準を指定することができます。
この関数のデフォルトのソートにおいて核心となる **Unicodeコードポイント** 値のソート順とは何か、そして必要に応じてソート基準を指定する **コールバック関数** について解説します。
# **Unicodeコードポイント**値のソート順
デフォルトのソート時、sort()関数は各要素を文字列に変換した後、**Unicodeコードポイント**値のソート順で配列の要素をソートします。
Unicodeコードポイント値は、各文字を識別するために割り当てられた固有の数値です。
これらのUnicodeコードポイント値は、英語、日本語、絵文字を含む多様な言語において規格化され、整列されています。この数値の大きさを比較することで、どの文字が前か後ろかを知ることができます。したがって、この基準を利用して配列の要素をソートすることができます。
# 必要に応じて整列基準を指定する**コールバック関数**
sort()関数は、基本的には各要素を文字列に変換した後、**Unicodeコードポイント**値の並び順に従いますが、必要に応じて引数にコールバック関数を渡して整列基準を指定することができます。
注意点
# 疎な配列とundefined値を持つ要素
sort()関数は配列要素の値を基準に従って整列させます。しかし、配列に値がない要素(疎な配列)やundefined値がある場合には、常に配列の最後尾に移動します。
# **Unicodeコードポイント**値の整列順序に関する誤解
sort()関数のデフォルトのソート(整列)は、各要素を文字列に変換した後、各文字を識別するために付与された Unicodeコードポイント値の整列順序を基準にして行われます。
この整列(ソート)方式は、一部の文字列の場合、私たちが期待する自然な順序で整列されているように見えることもあります。
# 数字配列の整列
数字の配列を整列する際には注意が必要です。
sort()関数のデフォルトの整列(ソート)は、配列の要素を文字列に変換して比較します。これは、整列時の比較基準が文字列であることを意味します。実際に配列の要素自体が文字列に変わるわけではなく、整列の過程で比較を行う際に、文字列に変換された値が使用されます。したがって、整列結果は文字列ではなく、元の要素の値が整列された配列として返されます。
参考資料