JavaScript Intl.Collator — правильне сортування української абетки
Intl.Collator порівнює рядки за правилами мови — для правильного сортування.
Загальний опис
Звичайний array.sort() порівнює рядки за кодами символів. Для латиниці це майже працює, для кирилиці — ні: усі великі літери йдуть перед усіма малими, а літери на кшталт «і» та «ї» опиняються геть не там, де їх шукає людина.
Результат — список, у якому «Яблуко» стоїть перед «іграшка». Виглядає як баг, і це він і є.
Collator знає українську абетку. Опція numeric: true додає ще й природне сортування чисел у рядках: «файл2» перед «файл10», а не навпаки.
Як і решта Intl, він дорогий у створенні — тож роби один об'єкт і передавай його метод у sort().
- Порада
-
автор: NagarD[...items].sort(new Intl.Collator('uk').compare)— це і є правильне сортування українською. Один рядок замість власної таблиці абетки.
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| Collator | 24+ | 29+ | 10+ | 15+ | 12+ | 11+ |
| Переглядач | ||||
|---|---|---|---|---|
| Collator | 26+ | yes | yes | 10+ |
Приклади
+ запропонувати свій приклад у пісочниці
Чому звичайний sort() дає безглуздий порядок.
const words = ['Яблуко', 'іграшка', 'їжак', 'абетка'];
// за кодами символів — безглуздо
console.log([...words].sort());
// ['Яблуко', 'абетка', 'іграшка', 'їжак'] — велика літера попереду
// за українською абеткою
const collator = new Intl.Collator('uk-UA');
console.log([...words].sort(collator.compare));
// ['абетка', 'іграшка', 'їжак', 'Яблуко']
// природне сортування чисел у рядках
const files = ['файл10', 'файл2', 'файл1'];
const natural = new Intl.Collator('uk', { numeric: true });
console.log([...files].sort(natural.compare)); // файл1, файл2, файл10
Коментарі
Коментарів ще немає — будьте першим!