Maison > interface Web > js tutoriel > le corps du texte

Comment aplatir la liste des propriétés d'un objet imbriqué avec la hiérarchie ?

Susan Sarandon
Libérer: 2024-10-20 14:30:02
original
870 Les gens l'ont consulté

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

Bouclage récursif à travers un objet pour créer une liste de propriétés

Problème :
Création d'une liste aplatie de clés de propriété à partir d'un objet complexe avec plusieurs niveaux d'imbrication, tout en conservant la hiérarchie.

Structure de données sous-jacente :
L'objet donné a une structure hiérarchique avec des propriétés à différents niveaux.

Sortie souhaitée :
Une liste de clés de propriété qui reflètent la hiérarchie.

Approche initiale :
Une fonction de récursivité de base, itérer, est fournie pour boucler à travers l’objet et imprimer les clés de propriété. Cependant, il ne maintient pas la hiérarchie.

Solution :
Pour tenir compte de la hiérarchie, une variable de pile est introduite pour stocker le chemin actuel dans l'objet. Lorsque la fonction de récursion parcourt l'objet, elle ajoute la propriété actuelle à la pile. Lorsqu'une propriété primitive est rencontrée, elle est imprimée avec la pile concaténée, représentant le chemin complet vers cette propriété.

Code révisé :

<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>
Copier après la connexion

Solution mise à jour :
La solution mise à jour dans la réponse référencée fournit une implémentation plus propre utilisant une combinaison de fonctions map et de réduction pour parcourir l'objet de manière récursive et créer la liste aplatie des clés de propriété.

<code class="js">Object.keys(object).map(key => createPath(object, key, "")).reduce((a, b) => a.concat(b))</code>
Copier après la connexion

Explication de la fonction :

  • createPath : Construit de manière récursive le chemin de la propriété de l'objet racine à la propriété actuelle.
  • reduce : Combine les tableaux de chemins de propriétés de toutes les propriétés en un seul tableau aplati.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal