разбить массив на несколько по уникальным значениям

Помогите, пожалуйста, получить несколько массивов из одного по значениям id. Я новичок в js, не могу разобраться.. Заранее благодарю. Например,

const arr = [
  {id: 1, title: '1'},
  {id: 2, title: '514321'},
  {id: 2, title: '87567'},
  {id: 3, title: 'dsf'},
  {id: 4, title: 'asdsa'},
  {id: 4, title: 'asddasa'},
  {id: 5, title: 'asdasd'}
];

должно получиться:

arr = [
  [{id: 1, title: '1'}],
  [{id: 2, title: '514321'}, {id: 2, title: '87567'}],
  [{id: 3, title: 'dsf'} и тд]
]

нашлось такое решение, но я не знаю как получить объекты:

const arr = [
  {id: 1, title: '1'},
  {id: 2, title: '514321'},
  {id: 2, title: '87567'},
  {id: 3, title: 'dsf'},
  {id: 4, title: 'asdsa'},
  {id: 4, title: 'asddasa'},
  {id: 5, title: 'asdasd'}
];

const d = {};

arr
  .map((el) => el.id)
  .forEach(function(value) {
    if (typeof d[value] == "undefined") d[value] = [];
    d[value].push(value);
  });

const c = Object.keys(d).map(function(key) {
  return d[key];
});

console.log(c); // [ [ 1 ], [ 2, 2 ], [ 3 ], [ 4, 4 ], [ 5 ] ]


Ответы (2 шт):

Автор решения: EzioMercer

Вам просто надо было передавать не только id элемента, но и сам элемент и устанавиливать его в качестве значения:

const arr = [
  {id: 1, title: '1'},
  {id: 2, title: '514321'},
  {id: 2, title: '87567'},
  {id: 3, title: 'dsf'},
  {id: 4, title: 'asdsa'},
  {id: 4, title: 'asddasa'},
  {id: 5, title: 'asdasd'}
];

const d = {};

arr
  .map((el) => ({id: el.id, el}))
  .forEach(function(value) {
    if (typeof d[value.id] == "undefined") d[value.id] = [];
    d[value.id].push(value.el);
  });

const c = Object.keys(d).map(function(key) {
  return d[key];
});

console.log(c); // [ [ 1 ], [ 2, 2 ], [ 3 ], [ 4, 4 ], [ 5 ] ]

→ Ссылка
Автор решения: Никита

Вот моё, более простое, решение:

const arr = [
    {id: 1, title: '1'},
    {id: 2, title: '514321'},
    {id: 2, title: '87567'},
    {id: 3, title: 'dsf'},
    {id: 4, title: 'asdsa'},
    {id: 4, title: 'asddasa'},
    {id: 5, title: 'asdasd'}
]

let result = []

for (let i = 0; i < arr.length; i++) {
    if (result[arr[i].id - 1] === undefined)
        result.push([])

    result[arr[i].id - 1].push(arr[i])
}

console.log(result)

→ Ссылка