--- title: String.prototype.localeCompare() slug: Web/JavaScript/Reference/Global_Objects/String/localeCompare tags: - JavaScript - Method - Prototype - String - Довідка - Уміжнароднення - метод translation_of: Web/JavaScript/Reference/Global_Objects/String/localeCompare ---
Метод localeCompare() повертає число, яке вказує, як має розташуватись рядок відносно вказаного (того, що передано як параметр) у відсортованій за зростанням послідовності: перед, після, чи вони однакові.
{{EmbedInteractiveExample("pages/js/string-localecompare.html")}}
The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
Нові арґументи locales та options дають можливість вказати мову, абетковий порядок сортування якої має бути застосовано, та налаштувати механізм порівняння рядків. Раніше, коли цих арґументів ще не було, механізм порівняння рядків та порядок їх сортування цілковито залежав від реалізації.
referenceStr.localeCompare(compareString[, locales[, options]])
Перевіряйте в таблиці сумісності наявність підтримки арґументів locales та options, а також подивіться на код для перевірки наявності такої підтримки.
compareStringАргументи locales та options налаштовують поведінку функції та дозволяють застосункам визначати мову, конвенції якої щодо форматування мають використовуватись. У тих реалізаціях, які ігнорують аргументи locales та options, локаль, що використовується, та форма поверненого рядка повністю залежать від реалізації.
Деталі цих параметрів та як їх використовувати дивіться у статті Конструктор Intl.Collator().
compareString;compareString;Вертає ціле число, що вказує, чи рядок referenceStr розташований перед compareStr, після compareStr, чи є еквівалентним compareStr.
НЕ ПОКЛАДАЙТЕСЬ на точні повернені значення -1 чи 1. Від'ємні та додатні цілочисельні результати різняться між переглядачами (а також між версіями переглядачів), тому що специфікація W3C вимагає лише від'ємних та додатних значень. Деякі переглядачі можуть повернути -2 чи 2, чи навіть деякі інші від'ємні та додатні значення.
localeCompare()// Вертає від'ємне значення, позаяк літера «a» розташована раніше за «b»
'a'.localeCompare('c'); // -2 чи -1 (або інше від'ємне значення)
// Вертає додатне значення, позаяк за абеткою слово "check" слід розташувати після "against"
'check'.localeCompare('against'); // 2 чи 1 (або інше додатне значення)
// Вертає нуль, позаяк рядки однакові
'a'.localeCompare('a'); // 0
Метод localeCompare() надає можливість регістронезалежного сортування масивів:
var 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 досі не підтримуються всіма переглядачами. Тож, з метою з'ясування наявності підтримки можна скористатися тим, що метод викидає (лише за наявності такої підтримки згаданих арґументів) виняток {{jsxref("Global_Objects/RangeError", "RangeError")}}, якщо параметр locales не вказує належного мовного коду. Наприклад, вкажемо напевне відсутній код "i":
function checkLocaleCompareSupportsLocales() {
try {
'foo'.localeCompare('bar', 'i');
} catch (e) {
return e.name === 'RangeError';
}
return false;
}
localesПорівняння рядків за допомогою localeCompare() узалежнено від мови. Для застосування належного для вживаної мови (наприклад, для мови користувацького інтерфейсу вашого застосунку) порядку сортування, не забудьте вказати відповідний мовний код (або й запасні мовні коди) через параметр locales:
// виводить від'ємне значення (у німецькій абетці літера «ä» розташована раніше «z»)
console.log('ä'.localeCompare('z', 'de'));
// виводить додатне значення (у шведській абетці літера «ä» розташована пізніше «z»)
console.log('ä'.localeCompare('z', 'sv'));
optionsАрґумент options надає можливість додаткового налаштування способу порівняння рядків методом localeCompare():
// У німецькій мові літера «ä» є похідною від базової літери «a»
// виводить 0
console.log('ä'.localeCompare('a', 'de', {sensitivity: 'base'}));
// У шведській мові «ä» та «a» є окремими базовими літерами
// виводить додатне значення
console.log('ä'.localeCompare('a', 'sv', {sensitivity: 'base'}));
// за замовчуванням, "2" > "10"
console.log("2".localeCompare("10")); // 1
// сортування за допомогою options:
console.log("2".localeCompare("10", undefined, {numeric: true})); // -1
// сортування за допомогою тега locales:
console.log("2".localeCompare("10", "en-u-kn-true")); // -1
З огляду на швидкодію, для порівняння величезної кількості рядків (наприклад, під час сортування великих масивів) ліпше створювати об'єкт {{jsxref("Global_Objects/Collator", "Intl.Collator")}} та використовувати функцію, надану його властивістю {{jsxref("Collator.prototype.compare", "compare")}}:
function sortLargeStringArray(array, locale) {
var collator = new Intl.Collator(locale);
array.sort(collator.compare);
}
// sortLargeStringArray([ … ], 'uk');
| Специфікація |
|---|
| {{SpecName('ESDraft', '#sec-string.prototype.localecompare', 'String.prototype.localeCompare')}} |
| {{SpecName('ES Int Draft', '#sec-String.prototype.localeCompare', 'String.prototype.localeCompare')}} |
Таблиця сумісності на цій сторінці створена зі структурованих даних. Якщо ви хочете долучитися до розробки цих даних, пропонуйте нам свої pull request до репозиторію https://github.com/mdn/browser-compat-data.
{{Compat("javascript.builtins.String.localeCompare")}}