Beispiel für die Konvertierung eines flachen JavaScript-Arrays in eine Baumstruktur

Beispiel für die Konvertierung eines flachen JavaScript-Arrays in eine Baumstruktur

10.000 Daten gingen im Hintergrund verloren

Egal wie viel ich plante, ich konnte ihm nicht entkommen. Das Backend warf tatsächlich Zehntausende Daten auf einmal an das Frontend. Naja, zumindest sind es noch keine 100.000. Wie unten gezeigt, gibt der Hintergrund die folgende Struktur zurück:

const flatArr = [
  { id: '001', name: 'Knoten 1' },
  { id: '0011', parentId: '001', name: 'Knoten 1-1' },
  { id: '00111', parentId: '0011', name: 'Knoten 1-1-1' },
  { id: '002', name: 'Knoten 2' },
]

Wie Sie sehen, handelt es sich hierbei eigentlich um ein flaches Array. Unsere Anforderung besteht darin, solche Daten im Kaskadenselektor von Element-ui darzustellen, der die folgende Baumstruktur erhält:

let Optionen = [
  {
    Wert: 'zhinan',
    Bezeichnung: 'Leitfaden',
    Kinder: [
      {
        Wert: 'shejiyuanze',
        Bezeichnung: 'Designprinzipien',
        Kinder: [
          { Wert: 'yizhi', Bezeichnung: 'konsistent' },
          {Wert: 'fankui', Bezeichnung: 'Feedback'}
        ],
      }
    ]
  }
]

Oh mein Gott, dazu muss ich das flache Array in eine Baumstruktur umwandeln!
Die Operation war so wild wie ein Tiger und die Rekursion wurde ohne ein Wort geschrieben.

Rekursive Methode

Es ist fertig, der Code ist prägnant, die Idee ist klar, aber was passiert, wenn es ausgeführt wird? Die Seite hängt. Laut console.time() hat es etwa 18 Sekunden gedauert, die benötigte Baumstruktur zu berechnen.
Ich habe über mich nachgedacht. Es gibt Zehntausende von Daten. Jedes Mal, wenn ich rekursiv von unten nach oben nach den untergeordneten Knoten des übergeordneten Knotens suche, muss ich das Array einmal durchlaufen, was natürlich zeitaufwändig ist! Darüber hinaus hat die Berechnungszeit offensichtlich zum Einfrieren der Seite geführt, sodass diese Methode definitiv nicht ratsam ist. Gibt es also eine bessere Lösung?

Nicht rekursive Methode

Hier wenden wir geschickt die Funktion an, dass Objekte Referenzen speichern. Jedes Mal wird die ID des aktuellen Knotens als Schlüssel verwendet, um die Referenzinformationen des entsprechenden Knotens zu speichern. Beim Durchlaufen des Arrays werden die untergeordneten Informationen von objMap jedes Mal aktualisiert. Auf diese Weise bleiben alle Knoten und ihre untergeordneten Knoten in objMap erhalten. Am wichtigsten ist, dass wir das Array nur einmal durchlaufen müssen und die Zeitkomplexität O(n) beträgt. Die Berechnungszeit beträgt bei dieser Methode nur 60ms!

Zusammenfassen

  • Rekursive Methode: Jedes Mal, wenn Sie rekursiv nach den untergeordneten Knoten des aktuellen Knotens suchen, müssen Sie das Array erneut durchlaufen und die zeitliche Komplexität beträgt O (nlogn).
  • Nicht rekursive Methode: Suche nach untergeordneten Knoten vom Stammknoten abwärts, speichere die Informationen jedes Knotens und seiner untergeordneten Knoten über die Karte, die untergeordneten Knoten speichern die Referenzen auf der Karte, die untergeordneten Knoten jedes Knotens können in der Karte anhand der ID gefunden werden, die zeitliche Komplexität beträgt O(n)

Schauen wir uns eine Vergleichstabelle an:

Aus dem oben beschriebenen Trend, dass die zeitliche Komplexität mit der Datenmenge zunimmt, können wir erkennen, dass bei immer größer werdenden Datenmengen der Zeitaufwand des rekursiven Algorithmus viel größer ist als der des nicht-rekursiven Algorithmus. Daher bietet die Verwendung eines rekursiven Algorithmus bei kleinen Datenmengen gewisse Vorteile. Bei einer bestimmten Datenmenge werden die Nachteile des rekursiven Ansatzes jedoch immer deutlicher und die Verwendung eines nicht rekursiven Algorithmus ist viel schneller!

Abschließend muss ich sagen, dass wir durch diesen Vergleich deutlich die Bedeutung von Algorithmen spüren können. Unterschiedliche Implementierungsmethoden können große Unterschiede aufweisen, die die Aufmerksamkeit jedes Entwicklers verdienen!

Dies ist das Ende dieses Artikels über das Implementierungsbeispiel zur Konvertierung eines flachen JavaScript-Arrays in eine Baumstruktur. Weitere relevante Inhalte zur Konvertierung eines flachen JavaScript-Arrays in eine Baumstruktur finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Vue.js-Baumkomponente löschen, Doppelklick zum Hinzufügen eines Zweigs, Beispielcode
  • So implementieren Sie eine unendliche Baumstruktur in Java und JS (ähnlich der Rekursion)
  • JavaScript-Baumkomponente realisiert unendliche Baumstruktur

<<:  Häufige Ursachen und Lösungen für langsame MySQL-SQL-Anweisungen

>>:  Gespeicherte MySQL-Prozeduren, d. h. eine Zusammenfassung allgemeiner logischer Wissenspunkte

Artikel empfehlen

Beispielcode zum Erstellen eines minimierten Header-Effekts nur mit CSS

Zusammengeklappte Kopfzeilen sind eine großartige...

Fabric.js implementiert DIY-Postkartenfunktion

In diesem Artikel wird der spezifische Code von F...

JS realisiert den Effekt der Baidu News-Navigationsleiste

In diesem Artikel wird der spezifische JS-Code zu...

Centos6.9-Installation Mysql5.7.18 Schrittaufzeichnung

Installationsreihenfolge rpm -ivh mysql-community...

jQuery implementiert das Ausblenden und Anzeigen von HTML-Elementen

Lassen Sie uns die Funktion von Taobao nachahmen,...

So erstellen Sie einen Nginx-Server mit Docker

Betriebsumgebung: MAC Docker-Version: Docker vers...

So deinstallieren Sie IIS7-Web- und FTP-Dienste in Win7 vollständig

Nachdem ich gestern die PHP-Entwicklungsumgebung ...

JavaScript-Wissen: Konstruktoren sind auch Funktionen

Inhaltsverzeichnis 1. Definition und Aufruf des K...

CocosCreator Universal Framework Design Network

Inhaltsverzeichnis Vorwort WebSocket verwenden Er...

Allgemeine Front-End-JavaScript-Methodenkapselung

Inhaltsverzeichnis 1. Geben Sie einen Wert ein un...