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

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

Шаг 1: Определение массива объектов

Для начала создадим массив объектов, который мы будем сортировать. В данном примере мы будем использовать массив объектов, представляющих элементы с именем и значением:

let objects = [
{ name: "море", value: 3 },
{ name: "МОРЕ", value: 2 },
{ name: "гора", value: 1 },
{ name: "дом", value: 3 },
{ name: "дом", value: 2 },
{ name: "лес", value: 1 },
];

Шаг 2: Создание экземпляра Intl.Collator

Создадим экземпляр Intl.Collator с учётом русской локализации:

const collator = new Intl.Collator('ru');

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

Шаг 3: Сортировка массива объектов

Теперь мы применяем метод сортировки к массиву объектов, используя collator.compare для сравнения значений свойства name:

objects.sort((a, b) => collator.compare(a.name, b.name));

Этот код сортирует массив объектов в соответствии с правилами сортировки русской локализации.

Шаг 4: Вывод отсортированного массива

Выведем отсортированный массив в консоль:

console.log(objects);

Полный код и результат

let objects = [
{ name: "море", value: 3 },
{ name: "МОРЕ", value: 2 },
{ name: "гора", value: 1 },
{ name: "дом", value: 3 },
{ name: "дом", value: 2 },
{ name: "лес", value: 1 },
];
const collator = new Intl.Collator('ru');
objects.sort((a, b) => collator.compare(a.name, b.name));
console.log(objects);

Результат выполнения скрипта:

[
{ name: "гора", value: 1 },
{ name: "дом", value: 3 },
{ name: "дом", value: 2 },
{ name: "лес", value: 1 },
{ name: "МОРЕ", value: 2 },
{ name: "море", value: 3 }
]

Теперь массив объектов отсортирован в алфавитном порядке с учётом русской локализации.
Чтоб было понятнее давайте напишем страны.

let objects = [
{ name: "Узбекистан", value: "+998" },
{ name: "Россия", value: "+7" },
{ name: "США", value: "+1" },
{ name: "Австрия", value: "+43" },
{ name: "Белоруссия", value: "+375" },
{ name: "Китай", value: "+86" },
{ name: "Германия", value: "+49" },
];
const collator = new Intl.Collator('ru');
objects.sort((a, b) => collator.compare(a.name, b.name));
console.log(objects);

Результат выполнения скрипта:

[
{ name: "Австрия", value: "+43" },
{ name: "Белоруссия", value: "+375" },
{ name: "Германия", value: "+49" },
{ name: "Китай", value: "+86" },
{ name: "Россия", value: "+7" },
{ name: "США", value: "+1" },
{ name: "Узбекистан", value: "+998" }
]

Обсуждение закрыто.