Heim  >  Artikel  >  Web-Frontend  >  Wie kann ich die Eigenschaftenliste eines verschachtelten Objekts mit Hierarchie reduzieren?

Wie kann ich die Eigenschaftenliste eines verschachtelten Objekts mit Hierarchie reduzieren?

Susan Sarandon
Susan SarandonOriginal
2024-10-20 14:30:02796Durchsuche

How to Flatten a Nested Object's Property List with Hierarchy?

Rekursives Durchlaufen eines Objekts zum Erstellen einer Eigenschaftenliste

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:

  • createPath: Konstruiert rekursiv den Eigenschaftspfad vom Stammobjekt zur aktuellen Eigenschaft.
  • reduce: Kombiniert die Arrays der Eigenschaftspfade aller Eigenschaften in einem einzigen abgeflachten Array.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn