String.prototype.localeCompare()
Базовая доступность Широко доступно
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с сентября 2017 года.
Метод localeCompare() значений String возвращает число, указывающее, предшествует ли данная строка, следует ли за ней или совпадает с заданной строкой в порядке сортировки. В реализациях с поддержкой Intl.Collator API этот метод делегирует Intl.Collator.
При сравнении большого количества строк, например при сортировке больших массивов, лучше создать объект Intl.Collator и использовать функцию, предоставляемую его методом compare().
Попробуйте
const a = "réservé"; // With accents, lowercase
const b = "RESERVE"; // No accents, uppercase
console.log(a.localeCompare(b));
// Expected output: 1
console.log(a.localeCompare(b, "en", { sensitivity: "base" }));
// Expected output: 0
Синтаксис
localeCompare(compareString) localeCompare(compareString, locales) localeCompare(compareString, locales, options)
Параметры
Параметры locales и options настраивают поведение функции и позволяют приложениям указать язык, чьи правила форматирования должны использоваться.
В реализациях, поддерживающих Intl.Collator API, эти параметры точно соответствуют параметрам конструктора Intl.Collator(). Реализации без поддержки Intl.Collator должны игнорировать оба параметра, что делает возвращаемый результат сравнения полностью зависящим от реализации — требуется лишь, чтобы он был согласованным.
-
compareString - Строка, с которой сравнивается
referenceStr. Все значения преобразуются в строки, поэтому опущение или передачаundefinedприводит к тому, чтоlocaleCompare()сравнивается со строкой"undefined", что редко является желаемым результатом. -
localesНеобязательно -
Строка с языковым тегом BCP 47 или массив таких строк. Соответствует параметру
localesконструктораIntl.Collator().В реализациях без поддержки
Intl.Collatorэтот параметр игнорируется, и обычно используется локаль хоста. -
optionsНеобязательно -
Объект, настраивающий формат вывода. Соответствует параметру
optionsконструктораIntl.Collator().В реализациях без поддержки
Intl.Collatorэтот параметр игнорируется.
См. конструктор Intl.Collator() для получения подробной информации о параметрах locales и options и способах их использования.
Возвращаемое значение
Отрицательное число, если referenceStr предшествует compareString; положительное, если referenceStr следует за compareString; 0, если они эквивалентны.
В реализациях с Intl.Collator это эквивалентно new Intl.Collator(locales, options).compare(referenceStr, compareString).
Описание
Возвращает целое число, указывающее, предшествует ли referenceStr, следует ли за ним или эквивалентно compareString.
- Отрицательное, когда
referenceStrпредшествуетcompareString - Положительное, когда
referenceStrследует заcompareString - Возвращает
0, если они эквивалентны
Внимание: Не полагайтесь на точные возвращаемые значения -1 или 1!
Отрицательные и положительные целочисленные результаты различаются в разных браузерах (а также между версиями браузеров), поскольку спецификация ECMAScript требует только отрицательных и положительных значений. Некоторые браузеры могут возвращать -2 или 2, или даже какое-либо другое отрицательное или положительное значение.
Примеры
Использование localeCompare()
// The letter "a" is before "c" yielding a negative value
"a".localeCompare("c"); // -2 or -1 (or some other negative value)
// Alphabetically the word "check" comes after "against" yielding a positive value
"check".localeCompare("against"); // 2 or 1 (or some other positive value)
// "a" and "a" are equivalent yielding a neutral value of zero
"a".localeCompare("a"); // 0
Сортировка массива
localeCompare() включает сортировку массива без учета регистра.
const items = ["réservé", "Premier", "Cliché", "communiqué", "café", "Adieu"];
items.sort((a, b) => a.localeCompare(b, "fr", { ignorePunctuation: true }));
// ['Adieu', 'café', 'Cliché', 'communiqué', 'Premier', 'réservé']
Проверка поддержки расширенных аргументов в браузере
Аргументы locales и options пока поддерживаются не во всех браузерах.
Чтобы проверить, поддерживает ли их реализация, используйте аргумент "i" (требование, согласно которому недопустимые языковые теги отклоняются) и ищите исключение RangeError:
function localeCompareSupportsLocales() {
try {
"foo".localeCompare("bar", "i");
} catch (e) {
return e.name === "RangeError";
}
return false;
}
Использование локалей
Результаты, предоставляемые localeCompare(), различаются в зависимости от языка. Чтобы получить порядок сортировки языка, используемого в пользовательском интерфейсе вашего приложения, убедитесь, что вы указали этот язык (и, возможно, некоторые резервные языки), используя аргумент locales:
console.log("ä".localeCompare("z", "de")); // a negative value: in German, ä sorts before z
console.log("ä".localeCompare("z", "sv")); // a positive value: in Swedish, ä sorts after z
Использование опций
Результаты, предоставляемые localeCompare(), могут быть настроены с помощью аргумента options:
// in German, ä has a as the base letter
console.log("ä".localeCompare("a", "de", { sensitivity: "base" })); // 0
// in Swedish, ä and a are separate base letters
console.log("ä".localeCompare("a", "sv", { sensitivity: "base" })); // a positive value
Числовая сортировка
// by default, "2" > "10"
console.log("2".localeCompare("10")); // 1
// numeric using options:
console.log("2".localeCompare("10", undefined, { numeric: true })); // -1
// numeric using locales tag:
console.log("2".localeCompare("10", "en-u-kn-true")); // -1
Спецификации
| Спецификация |
|---|
| ECMAScript® 2027 Language Specification # sec-string.prototype.localecompare |
| ECMAScript® 2027 Internationalization API Specification # sup-String.prototype.localeCompare |
Совместимость с браузерами
| Настольные | Мобильные | Серверные | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on iOS | Samsung Internet | WebView Android | WebView on iOS | Bun | Deno | Node.js | |
localeCompare |
1 |
12 |
1 |
7 |
3 |
18 |
4 |
10.1 |
1 |
1.0 |
4.4 |
1 |
1.0.0 |
1.0 |
0.10.0 |
locales_parameter |
24 |
12 |
29 |
15 |
10 |
26 |
56 |
Нет |
10 |
1.5 |
Нет |
10 |
1.0.0 |
1.8
1.0–1.8Доступны только данные локали дляen-US. |
13.0.0
0.12.0–13.0.0До версии 13.0.0 по умолчанию доступны только данные локали дляen-US. Когда указаны другие локали, функция молча переключается на en-US. Чтобы сделать полные данные ICU (локали) доступными до версии 13, см. документацию Node.js о параметре --with-intl и о том, как предоставить эти данные. |
options_parameter |
24 |
12 |
29 |
15 |
10 |
26 |
56 |
Нет |
10 |
1.5 |
Нет |
10 |
1.0.0 |
1.0 |
0.12.0 |
См. также
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare