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 не выполняет. Успешное выполнение в одной среде не гарантирует поддержку метода во всех браузерах.