Я пытаюсь создать иерархический объект дерева из плоского массива с родительскими идентификаторами.
// `parent` represents an ID and not the nesting level.
var flat = [
{ id: 1, name: "Business", parent: 0 },
{ id: 2, name: "Management", parent: 1 },
{ id: 3, name: "Leadership", parent: 2 },
{ id: 4, name: "Finance", parent: 1 },
{ id: 5, name: "Fiction", parent: 0 },
{ id: 6, name: "Accounting", parent: 1 },
{ id: 7, name: "Project Management", parent: 2 }
];
Конечный древовидный объект должен выглядеть следующим образом:
{
id: 1,
name: "Business",
children: [
{
id: 2,
name: "Management",
children: [
{ id: 3, name: "Leadership" },
{ id: 7, name: "Project Management" }
]
}
// [...]
]
}
// [...]
Вы можете увидеть мою текущую работу над этой скриптой, но она работает только на первых двух уровнях.
Я думал о сборе сирот (объектов из flat
без родителя в tree
), а затем снова перебирал их, чтобы увидеть, есть ли у них родительский. Но это может означать много циклов над деревом, особенно со многими категориями на нескольких уровнях.
Я уверен, что есть более элегантное решение.