Сортировка массива объектов с использованием Intl.Collator в JavaScript
Добавить в избранноеJavaScript предоставляет мощные средства для работы с массивами объектов, и одним из часто встречающихся сценариев является сортировка массива по определённому свойству объекта. В данной статье мы рассмотрим, как использовать Intl.Collator для сортировки массива объектов с учётом локализации, а также разберём, как работает функция сравнения.
Шаг 1: Определение массива объектов
Для начала создадим массив объектов, который мы будем сортировать. В данном примере мы будем использовать массив объектов, представляющих элементы с именем и значением:
{ name: "море", value: 3 },
{ name: "МОРЕ", value: 2 },
{ name: "гора", value: 1 },
{ name: "дом", value: 3 },
{ name: "дом", value: 2 },
{ name: "лес", value: 1 },
];
Шаг 2: Создание экземпляра Intl.Collator
Создадим экземпляр Intl.Collator с учётом русской локализации:
Этот экземпляр будет использоваться для сравнения строк, учитывая правила сортировки русского языка.
Шаг 3: Сортировка массива объектов
Теперь мы применяем метод сортировки к массиву объектов, используя collator.compare для сравнения значений свойства name:
Этот код сортирует массив объектов в соответствии с правилами сортировки русской локализации.
Шаг 4: Вывод отсортированного массива
Выведем отсортированный массив в консоль:
Полный код и результат
{ 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 }
]
Теперь массив объектов отсортирован в алфавитном порядке с учётом русской локализации.
Чтоб было понятнее давайте напишем страны.
{ 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" }
]