Как отсортировать пользователей по имени без мутации props?

Скопируйте массив, сравнивайте имена через localeCompare с нужной локалью и используйте id как дополнительный порядок и key. Сам sort без comparator не сравнивает поле name.

Короткий ответ

Что ответить на собеседовании

Скопируйте массив, сравнивайте имена через localeCompare с нужной локалью и используйте id как дополнительный порядок и key. Сам sort без comparator не сравнивает поле name.

Подробный разбор

Ответ с пояснениями

Условие

React-компонент получает users и выполняет users.sort() прямо в рендере, затем рисует строки с key по индексу. Имена содержат кириллицу; исходный порядок менять нельзя. Нужны алфавитная сортировка и стабильный порядок при одинаковых именах.

Ответ

Скопируйте массив, сравнивайте имена через localeCompare с нужной локалью и используйте id как дополнительный порядок и key. Сам sort без comparator не сравнивает поле name.

const sorted = [...users].sort((a, b) =>
  a.name.localeCompare(b.name, 'ru') || a.id - b.id
);

Здесь id — уникальное число, name — валидная строка по контракту. Выведите отдельное состояние для пустого списка и не используйте индекс как идентичность пользователя. Мемоизация сортировки нужна только при подтверждённой стоимости и стабильных входах, а не как обязательное украшение каждого компонента.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее