> Как обрабатывать дублирующиеся ключи при преобразовании массива объектов в объект в JavaScript (JavaScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Яндекс
Стек: JavaScript
> Пример ответа
При работе с дублирующимися ключами при преобразовании массива объектов в объект в JavaScript важно понимать, что стандартные методы (например, Object.fromEntries или reduce) просто перезаписывают значение последним встреченным. Чтобы контролировать обработку дубликатов, можно использовать следующие подходы:
- Агрегация значений в массив - если нужно сохранить все значения для одного ключа:
JAVASCRIPTconst arr = [{id: 1, name: 'Alice'}, {id: 1, name: 'Bob'}, {id: 2, name: 'Charlie'}];const result = arr.reduce((acc, item) => {const key = item.id;if (!acc[key]) {acc[key] = [];}acc[key].push(item);return acc;}, {});// { 1: [{id:1, name:'Alice'}, {id:1, name:'Bob'}], 2: [{id:2, name:'Charlie'}] }
- Выбор последнего значения - стандартное поведение, если дубликаты не критичны:
JAVASCRIPTconst result = Object.fromEntries(arr.map(item => [item.id, item]));// { 1: {id:1, name:'Bob'}, 2: {id:2, name:'Charlie'} }
- Кастомная логика - например, суммирование или выбор по условию:
JAVASCRIPTconst result = arr.reduce((acc, item) => {const key = item.id;if (!acc[key] || item.priority > acc[key].priority) {acc[key] = item;}return acc;}, {});
Выбор метода зависит от бизнес-требований: нужно ли сохранять все данные или достаточно уникального ключа.
> Похожие задачи по frontend
Куда записывается свойство при добавлении его в прототип объекта в JavaScript
Как отфильтровать строку, чтобы оставить только буквы с помощью регулярных выражений в JavaScript
Как реализовать функцию retry для повторного вызова асинхронной функции при ошибке в JavaScript
Как реализовать мемоизацию функции в JavaScript
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью