У меня есть массив с объектами пользователей, и мне нужно отсортировать его по полю name в алфавитном порядке.
Вот пример одного объекта из массива:
var client = {
description: null,
mail: "[email protected]",
name: "Мария",
userId: 125,
profileImage: null,
lastActivity: null,
surname: "Петрова",
username: "mary_p"
};
Какой способ лучше всего использовать для сортировки такого массива по полю name? Нужен рабочий пример кода на JavaScript.
Используй sort() с localeCompare() - это правильно отсортирует массив по полю name, даже с кириллицей:
const sortedClients = clients.sort((a, b) => a.name.localeCompare(b.name));
Чтобы игнорировать регистр, добавь параметры:
clients.sort((a, b) => a.name.localeCompare(b.name, 'ru', { sensitivity: 'base' }));
Так получишь корректную сортировку по правилам русского языка.
Для обратной сортировки просто поменяй a и b местами в функции сравнения. И убедись, что поле name заполнено - пустые значения могут вызвать ошибку.
Да, у меня была та же проблема! Обычная сортировка строк с русскими буквами глючит. localeCompare работает отлично. Только если у тебя в name могут быть null или undefined, добавь проверку: a.name && b.name ? a.name.localeCompare(b.name) : 0. А то словишь ошибку.