Сортировка с учётом локали
Корректно сортируйте строки с помощью Intl.Collator.
«Сортировка с учётом локали» — бесплатный урок JavaScript Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения JavaScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс JavaScript Academy содержит 4 уроков всего.
Почему стандартная сортировка не работает
Метод массива sort() сравнивает строки по кодовым единицам UTF-16. Поэтому прописные буквы оказываются перед строчными, а диакритические знаки обрабатываются неправильно — это не подходит для удобочитаемых списков.
const words = ["banana", "Apple", "cherry"];
console.log([...words].sort()); // ["Apple","banana","cherry"] — capital winslocaleCompare
String.prototype.localeCompare сравнивает две строки по правилам локали и возвращает отрицательное, нулевое или положительное значение.
console.log("apple".localeCompare("banana")); // -1
console.log("banana".localeCompare("apple")); // 1Сортировка с помощью localeCompare
Передайте его как функцию сравнения, чтобы получить порядок, удобный для людей.
const words = ["banana", "Apple", "cherry"];
console.log([...words].sort((a, b) => a.localeCompare(b)));
// ["Apple", "banana", "cherry"] — case-insensitive orderingIntl.Collator
При сортировке большого количества элементов Intl.Collator работает быстрее: создайте его один раз и повторно используйте его метод compare.
const collator = new Intl.Collator("en-US");
const words = ["banana", "Apple", "cherry"];
console.log([...words].sort(collator.compare));Акценты и диакритические знаки
Объекты Collator правильно упорядочивают символы с диакритическими знаками в соответствии с локалью, в отличие от сравнения по кодовым единицам.
const words = ["zebra", "ela", "elf", "elan"];
const collator = new Intl.Collator("fr");
console.log([...words].sort(collator.compare));Чувствительность
sensitivity определяет, какие различия важны: "base" игнорирует регистр и диакритические знаки, "accent" игнорирует только регистр, а "variant" учитывает все различия.
const c = new Intl.Collator("en", { sensitivity: "base" });
console.log(c.compare("apple", "APPLE")); // 0 (treated equal)Числовая сортировка
numeric: true сортирует встроенные числа по их значению, поэтому «file2» оказывается перед «file10».
const files = ["file10", "file2", "file1"];
const c = new Intl.Collator("en", { numeric: true });
console.log([...files].sort(c.compare)); // ["file1","file2","file10"]Порядок с учётом регистра
caseFirst: "upper" или "lower" определяет, будут ли прописные буквы располагаться перед строчными, если остальные различия отсутствуют.
const c = new Intl.Collator("en", { caseFirst: "upper" });
console.log(["b", "B", "a", "A"].sort(c.compare));Порядок зависит от локали
В разных языках используется разный алфавитный порядок. В шведском языке некоторые буквы с диакритическими знаками располагаются после z, а не рядом с a.
const words = ["z", "a", "o"];
console.log([...words].sort(new Intl.Collator("sv").compare));Поиск с учётом назначения
usage: "search" настраивает объект Collator для поиска, а не для упорядочивания — это удобно для фильтрации без учёта диакритических знаков.
const c = new Intl.Collator("en", { usage: "search", sensitivity: "base" });
function matches(a, b) { return c.compare(a, b) === 0; }
console.log(matches("cafe", "CAFE")); // trueСортировка объектов
При сортировке массивов объектов используйте объект Collator для сравнения значений ключа.
const people = [{ name: "Bob" }, { name: "alice" }, { name: "Carol" }];
const c = new Intl.Collator("en");
console.log(people.sort((a, b) => c.compare(a.name, b.name)).map((p) => p.name));Быстрая проверка
Проверьте сортировку с учётом локали.
Итоги: сортировка с учётом локали
Вы увидели, почему стандартный sort() работает неправильно, использовали localeCompare и более быстрый Intl.Collator, обрабатывали диакритические знаки, чувствительность, числовой порядок и порядок с учётом регистра, учитывали алфавиты разных локалей и поиск. На этом изучение Intl завершено.
Часто задаваемые вопросы
Урок «Сортировка с учётом локали» бесплатный?
Да — полный текст урока «Сортировка с учётом локали» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс JavaScript Academy, подпишись на CoddyKit PRO. Курс JavaScript Academy содержит 4 уроков всего.
Чему я научусь в уроке «Сортировка с учётом локали»?
Корректно сортируйте строки с помощью Intl.Collator. Ты практикуешь JavaScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать JavaScript Academy?
Предыдущий опыт не требуется. JavaScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Сортировка с учётом локали»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке JavaScript Academy?
Да. Каждый урок JavaScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Форматирование чисел и валют
- Форматирование дат и времени
- Относительное время и множественные формы
- Сортировка с учётом локали