String.prototype.localeCompare()

Сводка

Метод localeCompare() возвращает число, указывающее, должна ли данная строка находиться до, после или в том же самом месте, что и строка, переданная через параметр, при сортировке этих строк.

Новые аргументы locales и options позволяют приложениям определять язык, чей порядок сортировки оно хочет использовать и настраивать поведение этой функции. В старых реализациях, игнорирующих аргументы locales и options, используемая локаль и порядок сортировки целиком зависят от реализации.

Синтаксис

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

Параметры

Проверьте раздел Совместимость с браузерами, чтобы увидеть, какие браузеры поддерживают аргументы locales и options, и Пример: проверка поддержки аргументов locales и options для определения этой возможности.

compareString

Строка, с которой сравнивается данная.

{{page('/ru/docs/Web/JavaScript/Reference/Global_Objects/Collator', 'Parameters')}}

Описание

Возвращает число, указывающее, должна данная строка находится до, после или в том же самом месте, что и строка, переданная через параметр, при сортировке этих строк. Если данная строка предшествует строке compareString, возвращает отрицательное число, если она следует за строкой compareString, возвращает положительное значение и возвращает 0, если строки находятся на одном уровне.

Примеры

Пример: использование метода localeCompare()

Следующий пример демонстрирует различные потенциальные результаты для строки, находящейся до, после или на том же самом уровне, что и другая строка:

console.log(new Intl.Collator().compare('a', 'c')); // -2, -1 или другое отрицательное значение
console.log(new Intl.Collator().compare('c', 'a')); // 2, 1 или другое положительное значение
console.log(new Intl.Collator().compare('a', 'a')); // 0

Обратите внимание, что результат, показанный в коде выше, может сильно различаться в зависимости от браузера и его версии. Происходит это потому, что возвращаемые значения зависят от реализации. То есть, спецификация требует только того, чтобы значение было отрицательным, если строка данная следует до переданной, и положительным — если после.

Пример: проверка поддержки аргументов locales и options

Аргументы locales и options поддерживаются ещё не всеми браузерами. Для проверки того, поддерживает ли их уже реализация, можно затребовать несуществующую метку языка и проверить, будет ли выброшено исключение RangeError:

function localeCompareSupportsLocales() {
  try {
    'a'.localeCompare​('b', 'i');
  } catch (e) {
    return e​.name === 'RangeError';
  }
  return false;
}

Пример: использование аргумента locales

Результаты, предоставляемые методом localeCompare(), сильно различаются в зависимости от языка. Для получения порядка сортировки языка, используемого в пользовательском интерфейсе вашего приложения, убедитесь, что вы указали этот язык (и, возможно, несколько запасных языков) через аргумент locales:

console.log('ä'.localeCompare('z', 'de')); // отрицательное значение: в немецком буква ä идёт рядом с буквой a
console.log('ä'.localeCompare('z', 'sv')); // положительное значение: в шведском буква ä следует после буквы z

Пример: использование аргумента options

Результат, предоставляемый методом localeCompare(), может быть настроен с помощью аргумента options:

// В немецком буква a является базовой для буквы ä
console.log('ä'.localeCompare('a', 'de', { sensitivity: 'base' })); // 0

// В шведском буквы ä и a являются двумя разными базовыми буквами
console.log('ä'.localeCompare('a', 'sv', { sensitivity: 'base' })); // положительное значение

Производительность

При сравнении большого количества строк, например, при сортировке больших массивов, лучшим вариантом будет создание объекта Intl.Collator и использование функции, предоставляемой его свойством compare.

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

Specification
ECMAScript Language Specification
# sec-string.prototype.localecompare
ECMAScript Internationalization API Specification
# sup-String.prototype.localeCompare

Совместимость с браузерами

BCD tables only load in the browser

Смотрите также