Erstellen eines hierarchischen Baums aus einem flachen Array in JavaScript
In JavaScript gibt es Situationen, in denen Sie möglicherweise ein flaches Array von transformieren müssen Objekte, die eine hierarchische Struktur darstellen, in eine verschachtelte Baumstruktur. Dies kann bei der Arbeit mit komplexen JSON-Daten auftreten, wie im bereitgestellten Beispiel.
Um eine Baumstruktur aufzubauen, verwenden wir einen kartenbasierten Ansatz. Diese Methode ist effizient und unterstützt mehrere Wurzelknoten. Es erfordert, dass die übergeordneten Knoten im flachen Array vor ihren untergeordneten Knoten stehen.
So implementieren wir dies in JavaScript:
function list_to_tree(list) { var map = {}, node, roots = [], i; for (i = 0; i < list.length; i += 1) { map[list[i].id] = i; // initialize the map list[i].children = []; // initialize the children } for (i = 0; i < list.length; i += 1) { node = list[i]; if (node.parentId !== "0") { // if you have dangling branches check that map[node.parentId] exists list[map[node.parentId]].children.push(node); } else { roots.push(node); } } return roots; } var entries = //Your flat array of entries console.log(list_to_tree(entries));
Diese Lösung initialisiert eine Map-Map, die die Indizes jedes Knotens speichert ID, um eine schnelle Suche zu gewährleisten. Anschließend wird die Liste zweimal durchlaufen. Im ersten Durchgang wird die Kindereigenschaft jedes Knotens mit einem leeren Array initialisiert. Im zweiten Durchgang wird die Baumstruktur erstellt, indem Knoten mithilfe der Daten aus der Karte an ihre jeweiligen übergeordneten Knoten angehängt werden. Wenn ein Knoten die parentId „0“ hat, wird er als Wurzelknoten betrachtet und einem Array von Wurzeln hinzugefügt. Schließlich gibt die Funktion list_to_tree ein Array von Wurzelknoten zurück.
Das obige ist der detaillierte Inhalt vonWie kann man in JavaScript effizient einen hierarchischen Baum aus einem flachen Array erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!