Ich habe ein Problem beim Erstellen eines Baumes aus einem flachen Array. Ich baue eine Kategorie -> Unterkategorie Baum, in dem der Elternteil Unterkategorien als ein Array hat. HierJavascript Rekursion Baum Gebäude
ist, was die flache Anordnung aussehen würde:
[
{
"id": 1
},
{
"id": 5,
},
{
"id": 2,
"parent_id": 1
},
{
"id": 3,
"parent_id": 1
},
{
"id": 42,
"parent_id": 5
},
{
"id": 67,
"parent_id": 5
}
]
Und das ist, was ich brauche um das Ergebnis zu sehen:
[
{
"id":1,
"subcategories":[
{
"id":2,
"parent_id":1
},
{
"id":3,
"parent_id":1
}
]
},
{
"id":5,
"subcategories":[
{
"id":42,
"parent_id":5
},
{
"id":67,
"parent_id":5
}
]
}
]
Ich habe versucht, diese rekursiv zu tun, indem rekursiv die Suche nach Kinder und befestige es als ein Array und weiterhin so zu tun, bis ich den Boden des Laufs, aber ich bekomme eine zyklische Struktur. Es scheint, dass die parent_id in Traverse ist immer die ID des Mutter ... irgendwelche Ideen:
tree(passingInFlatObjectHere);
function topLevel (data) {
let blob = [];
data.forEach((each) => {
if (!each.parent_id) {
blob.push(each);
}
});
return blob;
}
function tree (data) {
let blob = topLevel(data).map(function (each) {
each.subcategories = traverse(data, each.id);
return each;
});
return blob;
}
function traverse (data, parent_id) {
let blob = [];
if (!parent_id) {
return blob;
}
data.forEach((each) => {
if (each.id === parent_id) {
each.subcategories = traverse(data, each.id);
blob.push(each);
}
});
return blob;
}
Wow Dank für die Hilfe und zeigt mir die alle schönen neuen Zucker in ES6. – Goodwin