JavaScript Array.sort() メソッド - 配列を正しくソートする
Array.sort()を比較関数で完全マスター。数値、文字列、オブジェクト、日付のソート。デフォルト文字列ソートの落とし穴とtoSorted()(ES2023)を網羅。無料リファレンス。
Ordering
詳細な説明
Array.sort()を理解する
Array.sort()は要素をその場でソートし、ソートされた配列を返します。比較関数がない場合、要素は文字列に変換されUTF-16コードユニット順でソートされます。
デフォルトソートの落とし穴
// 間違い — デフォルトは文字列としてソート!
[10, 1, 21, 2].sort();
// 結果: [1, 10, 2, 21](文字列順)
// 正しい — 数値には比較関数を使用
[10, 1, 21, 2].sort((a, b) => a - b);
// 結果: [1, 2, 10, 21]
比較関数のルール
比較関数は以下を返す必要があります:
- 負の値 — aがbの前に来る場合
- ゼロ — 等しい場合
- 正の値 — aがbの後に来る場合
sort()は変更を加える!
sort()は元の配列を変更します。元を保持する必要がある場合:
// ES2023以前の回避策
const sorted = [...arr].sort((a, b) => a - b);
// ES2023: toSorted()
const sorted = arr.toSorted((a, b) => a - b);
// arrは変更されない
パフォーマンス
sort()は実装依存のアルゴリズム(V8/SpiderMonkeyでは通常TimSort)を使用し、平均計算量はO(n log n)です。
ユースケース
sort()はリストのアルファベット順ソート、テーブルの列ソート、日付や優先度による並べ替え、カスタム順序ロジックの実装に使用します。不変性が必要なReact状態の更新にはtoSorted()を使用します。