Метод localeCompare() вертає число, що вказує, як має розташуватись рядок відносно вказаного (того, що передано як параметр) у відсортованій за зростанням послідовності: перед, після, чи вони однакові.

Нові арґументи locales та options дають можливість вказати мову, абетковий порядок сортування якої має бути застосовано, та налаштувати механізм порівняння рядків. Раніше, коли цих арґументів ще не було, механізм порівняння рядків та порядок їх сортування цілковито залежав від реалізації.

Синтаксис

referenceStr.localeCompare(compareString[, locales[, options]])

Параметри

Перевіряйте в таблиці сумісності наявність підтримки арґументів locales та options, а також подивіться на код для перевірки наявності такої підтримки.

compareString
Рядок, з яким буде здійснено порівняння.

Вертає

  • Від'ємне число, якщо рядок має розташуватись перед compareString;
  • Додатне число, якщо рядок має розташуватись після compareString;
  • Нуль, якщо рядки тотожні.

Опис

Метод призначено для лексикографічного порівняння рядків, тобто для встановлення їх належного порядку у відсортованій за абеткою послідовності рядків. Якщо метод повертає від'ємне значення, рядок referenceStr, для якого було здійснено виклик методу, слід розташувати перед compareString, що його було передано як параметр. Якщо метод повертає додатне значення, порядок зворотний — referenceStr має йти після compareString. Якщо метод повертає нуль, то рядки є тотожними.

// виводить 0
console.log('абв'.localeCompare('абв'));

// виводить від'ємне число
console.log('абвг'.localeCompare('абвґ'));

// виводить додатне число
console.log('абг'.localeCompare('абв'));

Зауважте, що слід послуговуватися саме поняттями додатний та від'ємний та відповідними порівняннями, як це зазначає специфікація W3C. На значення -1 та 1 покладатися не можна, бо кожна реалізація може відрізнятися. Наприклад, деякі переглядачі повертають -2 та 2 або інші числа.

Приклади

Використання localeCompare()

// Вертає від'ємне значення, позаяк літера «a» розташована раніше за «b»
'a'.localeCompare('c');  // -2 чи -1 (або інше від'ємне значення)

// Вертає додатне значення, позаяк за абеткою слово "check" слід розташувати після "against"
'check'.localeCompare('against');  // 2 чи 1 (або інше додатне значення)

// Вертає нуль, позаяк рядки однакові
'a'.localeCompare('a');  // 0

Сортування масиву

Метод localeCompare() надає можливість регістронезалежного сортування масивів:

var unsorted = ['update', 'Link', 'Add, 'feature', 'improve', 'Report'];

// вертає ["Add", "feature", "improve", "Link", "Report", "update"]
unsorted.sort((a, b) => a.localeCompare(b));

Перевірка наявності підтримки додаткових арґументів

Арґументи locales та options досі не підтримуються всіма переглядачами. Тож з метою з'ясування наявності підтримки, можна скористатися тим, що метод викидає (лише за наявності такої підтримки згаданих арґументів) виняток 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():

// Вжиток наголосу звичайно впливає на сортування рядків
// виводить 1
console.log('за́сновок'.localeCompare('засновок', 'uk'));

// Проте опція sensitivity дозволяє це змінити
// виводить 0
console.log('за́сновок'.localeCompare('засновок', 'uk', {sensitivity: 'base'}));

// У німецькій мові літера «ä» є похідною від «a»
// виводить 0
console.log('ä'.localeCompare('a', 'de', {sensitivity: 'base'}));

// У шведській мові «ä» та «a» є окремими первісними літерами
// виводить додатне значення
console.log('ä'.localeCompare('a', 'sv', {sensitivity: 'base'}));

Швидкодія

З огляду на швидкодію, для порівняння величезної кількості рядків (наприклад, під час сортування великих масивів) ліпше створювати об'єкт Intl.Collator та використовувати функцію, надану його властивістю compare:

function sortLargeStringArray(array, locale) {
  var collator = new Intl.Collator(locale);
  array.sort(collator.compare);
}

// sortLargeStringArray([ … ], 'uk');

Специфікації

Специфікація Статус Коментар
ECMAScript 3rd Edition (ECMA-262) Standard Первинне визначення. Реалізовано у JavaScript 1.2.
ECMAScript 5.1 (ECMA-262)
The definition of 'String.prototype.localeCompare' in that specification.
Standard  
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'String.prototype.localeCompare' in that specification.
Standard  
ECMAScript Latest Draft (ECMA-262)
The definition of 'String.prototype.localeCompare' in that specification.
Draft  
ECMAScript Internationalization API 1.0 (ECMA-402)
The definition of 'String.prototype.localeCompare' in that specification.
Standard Визначення параметрів locale та option.
ECMAScript Internationalization API 2.0 (ECMA-402)
The definition of 'String.prototype.localeCompare' in that specification.
Standard  
ECMAScript Internationalization API 4.0 (ECMA-402)
The definition of 'String.prototype.localeCompare' in that specification.
Draft  

Підтримка веб-переглядачами

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidEdge MobileFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
Basic supportChrome Full support YesEdge Full support YesFirefox Full support 1IE Full support YesOpera Full support YesSafari Full support YesWebView Android Full support YesChrome Android Full support YesEdge Mobile Full support YesFirefox Android Full support 4Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support Yesnodejs Full support Yes
localesChrome Full support 24Edge Full support YesFirefox Full support 29IE Full support 11Opera Full support 15Safari Full support 10WebView Android No support NoChrome Android Full support 26Edge Mobile ? Firefox Android No support NoOpera Android No support NoSafari iOS Full support 10Samsung Internet Android Full support Yesnodejs ?
optionsChrome Full support 24Edge Full support YesFirefox Full support 29IE Full support 11Opera Full support 15Safari Full support 10WebView Android No support NoChrome Android Full support 26Edge Mobile ? Firefox Android No support NoOpera Android No support NoSafari iOS Full support 10Samsung Internet Android Full support Yesnodejs ?

Legend

Full support  
Full support
No support  
No support
Compatibility unknown  
Compatibility unknown

Див. також

Мітки документа й учасники

Зробили внесок у цю сторінку: asmforce
Востаннє оновлена: asmforce,