Ich versuche, einen Baum mit dem Pfad für jeden Knoten zu machen:Javascript-Baum mit Pfad für jeden Knoten
Plunkr der aktuellen Demo (siehe Konsole nur): https://plnkr.co/edit/peCIZcSzChF3b2WnaOxk?p=preview
die ursprünglichen Daten: (dies ist eine Liste von Tags ist, die "Eltern" ist die ID Eltern)
var originals=[
{"id":1,"name":"Grammaire","parent":null},
{"id":2,"name":"Orthographe","parent":null},
{"id":8,"name":"Orthographe lexicale","parent":2},
{"id":9,"name":"Orthographe grammaticale","parent":2},
{"id":10,"name":"Adjectif couleur","parent":9},
{"id":11,"name":"Nombre","parent":8},
{"id":12,"name":"Annalyse grammaticale","parent":1},
{"id":19,"name":"Concordance des temps","parent":1},
{"id":20,"name":"annalyse 2","parent":12}
];
So sollte es einen Baum wie diese machen:
1-Grammaire
12-Annalyse grammaticale
20-Annalyse 2
19-Concordance des temps
2-Orthographe
8-Orthographe lexicale
9-Orthographe grammaticale
10-Adjectif couleur
11-Nombre
ich einen Code, der es machen:
function convert(array){
var map = {};
for(var i = 0; i < array.length; i++){
var obj = array[i];
obj["children"] = [];
map[obj.id] = obj;
var parent = obj.parent || '-';
if(!map[parent]){
map[parent] = {
children: []
};
}
map[parent].children.push(obj);
}
return map['-'].children;
}
Und das Ergebnis:
[
{"id":1,"name":"Grammaire","parent":null,
"children":[
{"id":12,"name":"Annalyse grammaticale","parent":1,
"children":[{"id":20,"name":"annalyse 2","parent":12,"children":[]}]
},
{"id":19,"name":"Concordance des temps","parent":1,"children":[]}
]},
{"id":2,"name":"Orthographe","parent":null,
"children":[
{"id":8,"name":"Orthographe lexicale","parent":2,
"children":[
{"id":11,"name":"Nombre","parent":8,"children":[]}]
},
{"id":9,"name":"Orthographe grammaticale","parent":2,
"children":[{"id":10,"name":"Adjectif couleur","parent":9,"children":[]}]
}
]
}
]
PROBLEM!
zum Beispiel für den Knoten mit id = 20
{"id":20,"name":"annalyse 2","parent":12,"children":[]}
Ich brauche für diesen Knoten des Elternknoten-ID und die Namen wie folgt zu erhalten:
{"id":20,"name":"annalyse 2","parent":12,"children":[]
"parentNodes"= [{"id":1,"name":"Grammaire"},{"id":12,"name":"Annalyse grammaticale"},{"id":20,"name":"annalyse 2"}]
}
Ich will nicht zyklische Lösung, weil ich es bereits mache und meinen Code-Fehler mache, weil ich dieses Objekt klonen muss.
Jede Hilfe ist willkommen, weiß ich, dass ich eine rekursive Funktion machen müssen, die den „Weg“ hinzufügen, aber ich kann nicht bis jetzt dank