Heim >Web-Frontend >js-Tutorial >Wie kann ich die Eigenschaftenliste eines verschachtelten Objekts mit Hierarchie reduzieren?
Problem:
Erstellen einer abgeflachten Liste von Eigenschaftsschlüsseln aus einem komplexen Objekt mit mehreren Verschachtelungsebenen unter Beibehaltung der Hierarchie.
Zugrunde liegende Datenstruktur:
Das gegebene Objekt hat eine hierarchische Struktur mit Eigenschaften auf verschiedenen Ebenen.
Gewünschte Ausgabe:
Eine Liste von Eigenschaftsschlüsseln, die die Hierarchie widerspiegeln.
Anfangsansatz:
Eine grundlegende Rekursionsfunktion, iterate, wird für die Schleife bereitgestellt durch das Objekt und drucken Sie die Eigenschaftsschlüssel aus. Die Hierarchie wird jedoch nicht beibehalten.
Lösung:
Um die Hierarchie zu berücksichtigen, wird eine Stapelvariable eingeführt, um den aktuellen Pfad im Objekt zu speichern. Während die Rekursionsfunktion das Objekt durchläuft, hängt sie die aktuelle Eigenschaft an den Stapel an. Wenn eine primitive Eigenschaft gefunden wird, wird sie zusammen mit dem verketteten Stapel gedruckt und stellt den vollständigen Pfad zu dieser Eigenschaft dar.
Überarbeiteter Code:
<code class="js">function iterate(obj, stack) { for (var property in obj) { if (obj.hasOwnProperty(property)) { if (typeof obj[property] === "object") { iterate(obj[property], stack + "." + property); } else { console.log(stack + "." + property); $('#output').append($('<div>').text(stack + "." + property)); } } } } iterate(object, "");</code>
Aktualisierte Lösung:
Die aktualisierte Lösung in der Antwort, auf die verwiesen wird, bietet eine sauberere Implementierung mit einer Kombination aus Zuordnungs- und Reduzierungsfunktionen, um das Objekt rekursiv zu durchlaufen und die abgeflachte Liste der Eigenschaftsschlüssel zu erstellen.
<code class="js">Object.keys(object).map(key => createPath(object, key, "")).reduce((a, b) => a.concat(b))</code>
Funktionserklärung:
Das obige ist der detaillierte Inhalt vonWie kann ich die Eigenschaftenliste eines verschachtelten Objekts mit Hierarchie reduzieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!