Сгруппировать объекты в массиве с повторяющиеся элементами
Eсть объекты в массиве в которых повторяется user_id,
[
{id: 1, user_id: 1, kod: 35, name: ted},
{id: 2, user_id: 2, kod: 34, name: nic},
{id: 3, user_id: 2, kod: 36, name: dad},
]
нужно сгруппировать в один массив объекты с одинаковыми элементами user_id,чтобы получить объект с массивами
{
[{user_id: 2,name: nic},{user_id: 2,name: dad}],
[{user_id: 1,name: ted}],
}
Ответы (1 шт):
Автор решения: Максим Вишневский
→ Ссылка
Вам нужно что-то такое, как я понимаю, если убрать Object.values(), то будет объект с ключами из user_id, значениями будут объединенные в массив группы:
const data = [
{ id: 1, user_id: 1, kod: 35, name: 'ted' },
{ id: 2, user_id: 2, kod: 34, name: 'nic '},
{ id: 3, user_id: 2, kod: 36, name: 'dad' },
];
const groupByUserId = (items) => Object.values(
items.reduce((acc, item) => {
if (!acc[item.user_id]) {
acc[item.user_id] = [];
}
acc[item.user_id].push(item);
return acc;
}, {}),
);
console.log(groupByUserId(data));