localeCompare() сравнивает две строки с учётом правил языка и локали.
Этот метод особенно полезен, когда строки нужно сортировать “по-человечески”, а не просто сравнивать по кодам символов.
Синтаксис
str.localeCompare(compareString)
str.localeCompare(compareString, locales)
str.localeCompare(compareString, locales, options)
Метод вызывается у строки и возвращает число.
Что возвращает localeCompare()
Результат показывает порядок строк:
- отрицательное число, если текущая строка должна идти раньше
0, если строки считаются равными- положительное число, если текущая строка должна идти позже
console.log("a".localeCompare("b")); // отрицательное число
console.log("a".localeCompare("a")); // 0
console.log("b".localeCompare("a")); // положительное число
Важно: не стоит рассчитывать именно на -1 и 1. Надёжно проверять только знак числа.
Как работает localeCompare()
console.log("apple".localeCompare("banana")); // отрицательное число
console.log("banana".localeCompare("apple")); // положительное число
Метод не возвращает true или false, а именно число для сравнения и сортировки.
Когда это полезно
localeCompare() удобно использовать, когда:
- нужно отсортировать строки
- важны правила конкретного языка
- нужно сравнивать строки “по-человечески”
Пример:
const words = ["banana", "apple", "cherry"];
words.sort((a, b) => a.localeCompare(b));
console.log(words); // ["apple", "banana", "cherry"]
Локаль
Во втором аргументе можно указать локаль.
console.log("ä".localeCompare("z", "de"));
console.log("ä".localeCompare("z", "sv"));
Для разных языков порядок символов может отличаться, поэтому локаль иногда влияет на результат сортировки.
Опции сравнения
В третьем аргументе можно передать настройки сравнения.
Одна из самых полезных опций - sensitivity.
console.log("e".localeCompare("é", "ru", { sensitivity: "base" })); // 0
console.log("e".localeCompare("é", "ru", { sensitivity: "variant" })); // не 0
С base различия вроде регистра и акцентов могут игнорироваться. С variant сравнение становится более строгим.
Числовая сортировка
По умолчанию строки "2" и "10" сравниваются как текст.
console.log("2".localeCompare("10")); // положительное число
Это происходит потому, что "2" и "10" воспринимаются как строки, а не числа.
Если нужна “человеческая” числовая сортировка, можно использовать опцию numeric.
console.log("2".localeCompare("10", "en", { numeric: true })); // отрицательное число
Это удобно, например, для сортировки версий, номеров и строк с числами.
localeCompare() и sort()
Очень частый сценарий - сортировка массива строк.
const items = ["яблоко", "банан", "апельсин"];
items.sort((a, b) => a.localeCompare(b, "ru"));
console.log(items);
Именно в связке с sort() этот метод используют чаще всего.
localeCompare() и обычное сравнение
Иногда строки сравнивают через < и >, но для сортировки текста на разных языках это не всегда лучший вариант.
const a = "яблоко";
const b = "банан";
console.log(a < b);
console.log(a.localeCompare(b, "ru"));
Для простых технических сравнений обычных ASCII-строк операторов может хватить, но для пользовательского текста localeCompare() обычно надёжнее.
Частые ошибки
Ожидать только -1, 0 или 1
console.log("a".localeCompare("b"));
Метод гарантирует отрицательное, ноль или положительное число, но не обязательно именно -1 и 1.
Использовать localeCompare() как boolean
const result = "a".localeCompare("b");
console.log(result); // отрицательное число
Это не булево значение. Метод предназначен именно для сравнения порядка строк.
Забывать про локаль и настройки
const items = ["2", "10"];
items.sort((a, b) => a.localeCompare(b));
Если ожидается числовой порядок, лучше явно передать numeric: true.
Быстрая памятка
localeCompare()сравнивает строки с учётом локали- метод возвращает отрицательное число,
0или положительное число - его часто используют внутри
sort() - можно передать локаль и опции сравнения
- для строк с числами полезна опция
numeric: true
Коротко
localeCompare() - это метод строки в JavaScript для сравнения строк по правилам конкретного языка. Он особенно удобен для сортировки текста, когда важны локаль, регистр, акценты и корректный порядок строк с числами.