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 :
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!