JavaScript Intl.Collator — правильне сортування української абетки


Intl.Collator порівнює рядки за правилами мови — для правильного сортування.

автор: NagarD

Загальний опис

Звичайний array.sort() порівнює рядки за кодами символів. Для латиниці це майже працює, для кирилиці — ні: усі великі літери йдуть перед усіма малими, а літери на кшталт «і» та «ї» опиняються геть не там, де їх шукає людина.

Результат — список, у якому «Яблуко» стоїть перед «іграшка». Виглядає як баг, і це він і є.

Collator знає українську абетку. Опція numeric: true додає ще й природне сортування чисел у рядках: «файл2» перед «файл10», а не навпаки.

Як і решта Intl, він дорогий у створенні — тож роби один об'єкт і передавай його метод у sort().

автор: NagarD

Порада

[...items].sort(new Intl.Collator('uk').compare) — це і є правильне сортування українською. Один рядок замість власної таблиці абетки.

автор: NagarD

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
Collator 24+ 29+ 10+ 15+ 12+ 11+
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
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
автор: NagarD

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід