Конструктор сортировщиков в JavaScript: Объект Intl.Collator

a335d048 d37d 4572 8c28 cc2599835179 HTML

В JavaScript объект Intl.Collator используется для сортировки строк с учётом языковых особенностей определённой страны. Этот конструктор позволяет корректно сравнивать строки, учитывая правила языка и региональные особенности, что не всегда возможно при стандартном посимвольном сравнении в кодировке ASCII.

Пример использования Intl.Collator

Рассмотрим следующий код:

let words = ["яблоко", "зебры", "Америка", "Бостон", "блум"];
console.log(words.sort(new Intl.Collator("en").compare));
console.log(words.sort());

Стандартное посимвольное сравнение

При использовании стандартного метода sort(), строки сравниваются посимвольно в соответствии с кодировкой ASCII. Это означает, что заглавные буквы будут отсортированы перед строчными, поскольку у них меньшие кодовые значения.

Пример:

console.log(['A', 'Z', 'a', 'z'].sort()); // ['A', 'Z', 'a', 'z']

Сортировка с использованием Intl.Collator

Объект Intl.Collator позволяет учитывать языковые особенности при сравнении строк. Например, в немецком языке буква ‘ä’ следует сразу за ‘a’, тогда как в шведском языке эта буква находится в конце алфавита после ‘z’.

Пример:

console.log(['b', 'a', 'z', 'ä'].sort(new Intl.Collator('de').compare)); // ['a', 'ä', 'b', 'z']
console.log(['b', 'a', 'z', 'ä'].sort(new Intl.Collator('sv').compare)); // ['a', 'b', 'z', 'ä']

Различия в результатах сортировки

Возвращаясь к нашему примеру:

let words = ["яблоко", "зебры", "Америка", "Бостон", "блум"];
console.log(words.sort(new Intl.Collator("en").compare));
console.log(words.sort());

Первый вызов words.sort(new Intl.Collator("en").compare) отсортирует массив строк в соответствии с правилами английского языка, где регистр символов не будет учитываться. Второй вызов words.sort() выполнит сортировку с учётом кодировки ASCII, где строки с заглавными буквами будут располагаться перед строками со строчными буквами.

Результаты сортировки будут следующими:

  1. words.sort(new Intl.Collator("en").compare):
// ['Америка', 'Бостон', 'блум', 'зебры', 'яблоко']

  2. words.sort():

// ['Америка', 'Бостон', 'блум', 'зебры', 'яблоко']

Таким образом, использование Intl.Collator позволяет учитывать языковые особенности при сортировке строк, что делает его более гибким и удобным инструментом для работы с текстовыми данными в различных языках и регионах.

Оцените статью