Сгруппировать объекты в массиве с повторяющиеся элементами

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));

→ Ссылка