J'ai une gamme d'objets imbriqués d'éponges:
let arr = [{id: 0, depth: 0, children: []}, {id: 1, depth: 0, children:[ {id: 2, depth: 1, children: []}, {id: 3, depth: 1, children: [ {id: 4, depth: 2, children: []} ]} ]} ];
4 Réponses :
Il suffit de faire une fonction qui prend un tableau et un paramètre code> de profondeur code> qui ajoute cette profondeur à tous les objets d'une matrice. Appelez-le ensuite sur le tableau CODE> ENFANTS CODE> avec une profondeur incrémentée:
p>
let arr = [{id: 0, children: []},{id: 1, children:[{id: 2, children: []},{id: 3, children: [{id: 4, children: []} ]}]}]; function addDepth(arr, depth = 0) { arr.forEach(obj => { obj.depth = depth addDepth(obj.children, depth + 1) }) } addDepth(arr) console.log(arr)
Probablement une bonne idée de vérifier si la matrice existe avec (arr || []). Foreach () code> ou
arr = [] code>
Je suis d'accord sur @pavlo et probablement une bonne idée de vous assurer que ARR code> et
enfants code> sont en réalité des tableaux. J'ai laissé ce type de code pour rendre la méthode de base aussi claire que possible.
J'irais avec la solution Ikram, car alors l'enseignant penserait qu'il est super bon à JavaScript
@Pavlo - sauf la solution IKRAM n'apporte pas de profondeur à aucun des objets - il renvoie simplement un numéro.
Vous avez raison, il semblait juste compliqué, alors j'ai supposé que c'était correctement codé, sans le regarder
Merci beaucoup pour votre réponse. Cela a aidé beaucoup :)
Vous pouvez itérer les matrices et ajouter une profondeur.
p>
.as-console-wrapper { max-height: 100% !important; top: 0; }
function addDepth(arr, depth) { arr.map((entry) => { entry.depth = depth; addDepth(entry.children, depth+1); }) } addDepth(arr, 0);
Pourquoi utiliser mapper code>? Pourquoi voudriez-vous retourner un tableau?
@Maxbaldwin il ne retourne rien
Je pense que c'est le point @pavlo, s'il ne retourne rien, pourquoi faire un tableau? Pourquoi pas seulement foreach code>?
Les raisons sont Twofold: premièrement, j'aime juste la carte sur la préférence ... préférence personnelle. Deuxièmement, j'avais l'intention d'utiliser une carte pour renvoyer un nouveau tableau mais réalisa immédiatement que ce serait une chose idiote à faire, mais je viens de garder la "carte" là-bas. Mais vraiment, j'aime juste la carte ... il "lit" mieux imo, même si c'est, en effet, strictement incorrect dans ce cas, n'hésitez pas à utiliser pour utiliser, à la place
@Leroystav Je ne voudrais pas vous voter pour cela, mais je pense que cela ne se lit que mieux si vous n'avez pas passé beaucoup de temps avec une programmation fonctionnelle. Je pense que cela se lit très étrangement aux autres. De plus, si la structure de données est importante à l'aide de mappe code> lorsque vous n'avez pas besoin de retourner la valeur Hurts Performances - chaque fois que vous l'utilisez, vous créez un tableau, qui est ensuite ignoré et recueilli ultérieurement. Bien sûr, c'est votre code ...
@Pavlo, oui c'était mon point. De plus, Leroy, je n'ai pas voté, mais vous devriez utiliser foreach code> si vous ne retournez rien. D'autres devts qui ont lu ce code seront confus. Votre code n'est pas pour vous. C'est pour eux.
Comme je l'ai dit, j'avais commencé avec autre chose à l'esprit :-) Vous avez raison, bien sûr, mais je pense que parfois le meilleur moyen d'apprendre quelque chose de nouveau est de le rencontrer, puis de la lire dessus ... Le gars voit ".map" puis le regarde, et maintenant il a appris quelque chose de nouveau. Aussi, désolé de vous impliquer la bownvoted ... Cela a juste senti que vous l'avez fait, vous savez? Je suis nouveau pour tenter de répondre à des questions et je suis heureux pour la critique constructive. Quant à votre point - oui, la performance sera pire avec ma solution, mais soyons honnêtes, ce n'est pas quelque chose que je n'utiliserais jamais une carte pour
Merci pour ce code Snippet, qui pourrait fournir une aide limitée et immédiate. Un Une explication appropriée améliorerait considérablement sa valeur à long terme en montrant pourquoi i> c'est une bonne solution au problème et le rendrait plus utile aux futurs lecteurs avec d'autres questions similaires. S'il vous plaît Modifier Votre réponse Pour ajouter une explication, y compris les hypothèses que vous avez apportées.
Vous devez écrire une fonction qui serait comptez pour vous. essayez celui-ci.
function depth(o){ var values; if (Array.isArray(o)) values = o; else if (typeof o === "object") values = Object.keys(o).map(k=>o[k]); return values ? Math.max.apply(0, values.map(depth))+1 : 1; }
Je pense que vous avez mal interprété la question. Cela revient simplement 7 code> lorsque je l'exécute et n'ajoute pas la profondeur aux objets.
Qu'avez-vous essayé? Ou est-ce votre devoir? :)
Semble être une utilisation primordiale de la récursion
Stackoverflow.com/help/how-to-ask
Veuillez lire Comment demander et fournir vos propres efforts en tant que Exemple reproductible minimal
Je suis nouveau chez Stackoverflow, je n'ai pas remarqué que je devrais fournir mes propres efforts pour ne pas être détesté :) J'ai essayé de construire une boucle de droite pendant quelques heures, mais je ne connais pas beaucoup de récursions, et je eu plusieurs erreurs pendant cela. J'avais besoin de cela pour une tâche, d'obtenir mon premier emploi en tant que dédéveloppeur front-end, pas de devoirs :) Encore une fois, merci pour vos réponses et vos efforts. Je jure, à l'avenir, je vais plus d'informations sur le public et mon code pour le faire correctement. Faucon :)