dr.Brain

doctor Brain

мир глазами веб-разработчика

JavaScript: конструктор сортировщиков

зачем нужен конструктор сортировщиков в JavaScript

dr.Brain

время чтения 2 мин.

Photo by Markus Spiske on Unsplash

В JavaScript есть объект Intl.Collator, называемый конструктором сортировщиков. Для чего он нужен и каковы особенности его использования?

let words = ["apple", "zebrs", "America", "Boston", "bloom"];

console.log(words.sort(new Intl.Collator("en").compare));
console.log(words.sort());

Какой результат выведет консоль после исполнения такого кода, в чем различия двух сортировок?

Для начала разберемся, что за объект Intl.Collator и какова его роль в JavaScript?

Объект Intl.Collator позволяет сравнивать строки с учетом языковых особенностей указанной страны.

Обычно в JavaScript сравнение строк происходит посимвольно в кодировке ASCII. Таким образом при сортировке по возрастанию, в начало списка попадают заглавные буквы в алфавитном порядке, и только потом идут строчные буквы тоже в алфавитном порядке.

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

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

Мы можем выбрать нужную локаль и получить строки отсортированные в соответствии с правилами нужного языкового стандарта.

Так, в результате исполнения сортировки массивов строк с учетом особенностей различных стран (Германии и Швеции):

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

мы получим результат:

['a', 'ä', 'b', 'z']
['a', 'b', 'z', 'ä']

Таким образом, в результат выполнения задачи мы увидим в консоли два отсортированных массива. Причем первый массив будет учитывать правила английского языка, так как для объекта Intl.Collator установлена локаль en. Второй массив будет учитывать регистр символов при сортировке строк: в начало списка попадут строки, начинающиеся с заглавных букв, а в конец списка попадут строки, состоящие из строчных символов.

let words = ["apple", "zebrs", "America", "Boston", "bloom"];

console.log(words.sort(new Intl.Collator("en").compare));
console.log(words.sort());

// ['America', 'apple', 'bloom', 'Boston', 'zebra']
// ['America', 'Boston', 'apple', 'bloom', 'zebra']


Спасибо за внимание.

Новые публикации

Далее

Категории

О нас

Frontend & Backend. Статьи, обзоры, заметки, код, уроки.