разбить массив на несколько по уникальным значениям
Помогите, пожалуйста, получить несколько массивов из одного по значениям 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)