Intl.Collatorによるロケール別照合とソート
Intl.Collatorを使用して、任意の言語の文字列を正しくソートします。感度レベル、数値ソート、大文字優先オプション、およびロケール間でのソート順の違いについて学びます。
Intl.Collator
詳細な説明
Intl.Collator:ロケール対応の文字列ソート
デフォルトのJavaScript文字列比較(localeCompareや< / >)はロケール固有のソートルールを正しく処理しません。Intl.Collatorは適切なロケール対応の文字列比較を提供します。
デフォルトソートが失敗する理由
// ドイツ語:äは'z'の後ではなく'a'の近くにソートされるべき
['äpfel', 'Apfel', 'Banane'].sort();
// ["Apfel", "Banane", "äpfel"] -- 間違い!
ロケール対応ソート
const de = new Intl.Collator('de');
['äpfel', 'Apfel', 'Banane'].sort(de.compare);
// ["Apfel", "äpfel", "Banane"] -- 正しい!
const sv = new Intl.Collator('sv');
['äpple', 'apple', 'banana'].sort(sv.compare);
// ["apple", "banana", "äpple"]
// スウェーデン語ではäはzの後にソートされる!
感度レベル
// "base": a = A = à = À
// "accent": a = A, à ≠ a
// "case": a ≠ A, à = a
// "variant": a ≠ A ≠ à ≠ À
数値ソート
const col = new Intl.Collator('en', { numeric: true });
['item10', 'item2', 'item1', 'item20'].sort(col.compare);
// ["item1", "item2", "item10", "item20"]
パフォーマンス
Intl.Collatorは大きな配列のソートにおいてString.prototype.localeCompare()よりも大幅に高速です。コレーターが一度作成されて再利用されるためです。
ユースケース
正しいソートは、ディレクトリリスト、連絡先リスト、検索結果の順序付け、およびアルファベット順の表示にとって重要です。ドイツのアドレス帳はウムラウト付きの名前を正しくソートする必要があります。スウェーデンのアプリケーションは'ä'のような文字を正しい順序に配置する必要があります。ファイルマネージャーは「file2」が「file10」の前に表示される数値ソートが必要です。