Maison  >  Article  >  interface Web  >  Comment aplatir la liste des propriétés d'un objet imbriqué avec la hiérarchie ?

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

Susan Sarandon
Susan Sarandonoriginal
2024-10-20 14:30:02793parcourir

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>

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>

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!

Déclaration:
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