Как создать структуру из многомерного обьекта?
Столкнулся с проблемой. У меня есть вот такой массив компонентов
let components = [
{
component: "input",
id: 1,
parentId: 0,
},
{
component: "select",
id: 2,
parentId: 1,
},
{
component: "date",
id: 3,
parentId: 2,
},
{
component: "input",
id: 4,
parentId: 0,
},
];
Как сделать так, чтобы на выходе получить вложеные обьекты по логике, что если есть parentId и он совпадает с элементом у которого такой id,то он становится вложенным в него. То есть в данном примере это выглядеть должно так:
{
component: input,
id: 1,
parentId: 0,
components: {
component: "Select",
id: 2,
parentId: 1,
components: {
component: "Date",
id: 3,
parentId: 2,
},
},
},
{
component: "Input",
id: 4,
parentId: 0,
}
];
Ответы (1 шт):
Автор решения: UserTest013
→ Ссылка
let o = [{
component: "input",
id: 1,
parentId: 0,
}, {
component: "select",
id: 2,
parentId: 1,
}, {
component: "date",
id: 3,
parentId: 2,
}, {
component: "input",
id: 4,
parentId: 0,
}];
const result = o.reduce((r, _) => (_.parentId === 0 ? r.push(_) : o.some((x) => (x.id === _.parentId ? (x.components = _, true) : false)), r), []);
console.log(result);