EinführungWir stoßen häufig auf baumartige Datenstrukturen, beispielsweise bei Organisationshierarchien, Provinzen, Städten, Landkreisen oder Tier- und Pflanzenklassifikationen. Nachfolgend sehen Sie ein Beispiel für eine Baumstruktur: In praktischen Anwendungen ist es üblich, diese Informationen in der folgenden Struktur zu speichern, insbesondere wenn eine Eins-zu-viele-Beziehung zwischen übergeordneten und untergeordneten Knoten besteht: const Daten = [ { id: 56, parentId: 62 }, { id: 81, parentId: 80 }, { id: 74, parentId: null }, { id: 76, parentId: 80 }, { id: 63, parentId: 62 }, { id: 80, parentId: 86 }, { id: 87, parentId: 86 }, { id: 62, parentId: 74 }, { id: 86, parentId: 74 }, ]; Wie konvertieren wir also dieses Objektarrayformat in ein hierarchisches Baumformat? Tatsächlich ist die Implementierung sehr einfach, wenn man die Eigenschaften von JavaScript-Objektreferenzen nutzt. Dies kann in O(n) Zeit ohne Rekursion durchgeführt werden. der Begriff Der Einfachheit halber definieren wir zunächst einige Begriffe. Wir nennen jedes Element im Array (also jeden Kreis im Baumdiagramm) einen „Knoten“. Ein Knoten kann der „übergeordnete Knoten“ mehrerer Knoten oder der „untergeordnete Knoten“ eines bestimmten Knotens sein. In der obigen Abbildung ist Knoten 86 der „übergeordnete Knoten“ von Knoten 80 und Knoten 87, und Knoten 86 ist der untergeordnete Knoten von Knoten 74. Der oberste Knoten des Baums wird als „Wurzelknoten“ bezeichnet. IdeenUm die Baumstruktur aufzubauen, benötigen wir:
Wir können sehen, dass Referenzen im Objektbaum gespeichert sind, weshalb wir diese Aufgabe in O(n) Zeit erledigen können! Erstellen einer ID-Array-IndexzuordnungsbeziehungObwohl dies nicht erforderlich ist, kann uns diese Zuordnungsbeziehung dabei helfen, den Speicherort des Elements schnell zu finden und das Auffinden des Verweises auf das übergeordnete Element zu erleichtern. const idMapping = data.reduce((acc, el, i) => { acc[el.id] = i; Rückgabe gem. }, {}); Die Zuordnungsergebnisse sind wie folgt und Sie werden später sehen, wie nützlich sie sind:
Aufbau einer BaumstrukturJetzt beginnen wir mit dem Aufbau dieser Baumstruktur. Iterieren Sie durch das Objekt-Array, suchen Sie das übergeordnete Objekt jedes Elements und fügen Sie dann eine Referenz auf das Element hinzu. Jetzt sollten Sie sehen, wie praktisch dieses idMapping zum Lokalisieren von Elementen ist (konstante Zeit). wurzeln lassen; data.forEach(el => { // Bestimme den Stammknoten, wenn (el.parentId === null) { Wurzel = el; zurückkehren; } //Verwende die Zuordnungstabelle, um das übergeordnete Element zu finden const parentEl = data[idMapping[el.parentId]]; // Füge das aktuelle Element dem „children“-Array des übergeordneten Elements hinzu parentEl.children = [...(parentEl.children || []), el]; }); Erledigt! Verwenden Sie console.log, um root auszudrucken und Folgendes anzuzeigen: Konsole.log(Root);
PrinzipWarum ist das möglich? Dies liegt daran, dass jedes Element im Datenarray ein Verweis auf ein Objekt im Speicher ist, die Variable el in der forEach-Schleife tatsächlich auf ein Objekt im Speicher verweist und parentEl ebenfalls auf ein Objekt verweist. Wenn ein Objekt im Speicher auf ein untergeordnetes Array verweist, können diese untergeordneten Elemente auch auf ihre eigenen untergeordneten Elementarrays verweisen. Diese Zuordnungen werden alle durch Referenzen vervollständigt. ZusammenfassenObjektreferenzen sind eines der grundlegendsten Konzepte in JavaScript und erfordern mehr Lernen und Verständnis. Wenn Sie dieses Konzept wirklich verstanden haben, können Sie knifflige Fehler vermeiden und relativ einfache Lösungen für scheinbar komplexe Probleme finden. Oben finden Sie eine kurze Erläuterung der Details eines effizienten Algorithmus zum Erstellen von Baumstrukturen in JavaScript. Weitere Informationen zu JavaScript-Algorithmen zum Erstellen von Baumstrukturen finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Detailliertes Installationstutorial für mysql-8.0.11-winx64.zip
>>: Lösung für Linux CentOS 6.5 ifconfig kann IP nicht abfragen
Hintergrundbeschreibung: Auf einem vorhandenen La...
Inhaltsverzeichnis 1. Implementieren Sie die Meth...
Vererbung von Prototypketten Die Prototypenvererb...
Inhaltsverzeichnis 1 Einleitung 2 Voraussetzungen...
Was ist Serdel userdel ist ein Low-Level-Tool zum...
1. Installieren Sie Python 3 1. Installieren Sie ...
Umfeld: 1 CentOS Linux-Version 7.5.1804 (Core) Fi...
Dieser Artikel stellt hauptsächlich den Installati...
Verwenden Sie JS zum Vergrößern und Verkleinern, ...
Manchmal ist das Herunterladen großer Netzwerkdat...
Vorwort In Bezug auf die Verwendung von MySQL-Ind...
Inhaltsverzeichnis Spezifikation a. Die Auslageru...
Vorwort MRR ist die Abkürzung für Multi-Range Rea...
<br />Ich freue mich sehr, an dieser Folge d...
(Teil 4) Webstandards bestehen aus einer Reihe von...