Вебсправочник
Справочник JavaScript

Intl.Collator: сравнение строк с правилами языка

Intl.Collator создаёт функцию сравнения строк с учётом локали. Она подходит для сортировки пользовательских названий, где порядок кодовых единиц не соответствует ожидаемому порядку чтения.

Назначение

Intl.Collator создаёт функцию сравнения строк с учётом локали. Она подходит для сортировки пользовательских названий, где порядок кодовых единиц не соответствует ожидаемому порядку чтения.

Как это работает

Создайте один объект и используйте compare при сортировке. Опция numeric позволяет сравнивать последовательности цифр как числовые части названий. Результат сравнения имеет важный знак, а не обязательно точное значение -1 или 1.

Пример

const collator = new Intl.Collator("ru", {numeric:true});
const names = ["Урок 10", "Урок 2", "Урок 1"];
const sorted = [...names].sort(collator.compare);
console.assert(sorted.join("|") === "Урок 1|Урок 2|Урок 10");
console.assert(names[0] === "Урок 10");
console.assert(collator.compare("Урок 2", "Урок 10") < 0);
console.log(sorted);

Что должно получиться

Номера в названиях идут в привычном числовом порядке, исходный массив сохранён. Отдельная проверка использует знак сравнения и не зависит от величины отрицательного результата.

Граница применения и частая ошибка

Локаль, настройки и данные среды могут влиять на порядок. Не используйте такую сортировку как универсальное правило для подписи данных или проверки уникальности идентификаторов. Чувствительность к регистру и акцентам выбирайте по задаче.

Самостоятельная проверка

Добавьте названия с одинаковым номером и разным регистром. Сравните numeric:true и false. Сформулируйте ожидаемый пользовательский порядок до выбора настроек и проверьте его в поддерживаемых средах.

Пример JavaScript проверяйте в собственном учебном файле или консоли своего проекта. Встроенная песочница справочника JavaScript не выполняет. Успешное выполнение в одной среде не гарантирует поддержку метода во всех браузерах.

Самостоятельный учебный материал. Техническая документация: первоисточник по теме ↗. Если результат отличается, проверьте код и версию браузера.