J'ai une sorte de question étrange - peut-être une question stupide - qui nécessite quelques explications, alors merci de patienter avec moi. Fondamentalement, je me demande s'il existe un moyen de traverser un objet de profondeur inconnue en JavaScript sans utiliser de récursivité.
Par exemple, disons que j'ai un objet de profondeur inconnue. Il peut ressembler à ceci :
let obj_depth2 = {
male:
{ short: 0, tall: 0 },
female:
{ short: 0, tall: 0 }
}
ou peut-être comme ceci :
let obj_depth3 = {
male: {
short:
{ basketball: 0, soccer: 0 },
tall:
{ basketball: 0, soccer: 0 }
},
female: {
short:
{ basketball: 0, soccer: 0 },
tall:
{ basketball: 0, soccer: 0 }
}
}
L'obj
peut être encore plus profond. Je ne connaîtrai pas sa profondeur à l'avance.
Supposons en outre que j'aurai un arr
qui ressemble à ceci, et qui correspondra à la profondeur de l'obj
en longueur.
let arr_depth2 = ["male", "short"];
ou
let arr_depth3 = ["male", "tall", "basketball"];
J'aurai une boucle dans laquelle je générerai, disons, 1 000 de ces arr
que j'utiliserai ensuite pour ajouter 1
à l'obj
de profondeur inconnue. Tous les arr
auront la même longueur (2 ou 3, ou plus) et correspondront toujours à la profondeur de l'obj
. Mais la profondeur changera et je veux écrire une seule fonction pour couvrir toutes les situations.
Pour être clair, je n'aurai PAS une situation où j'ai un obj
de profondeur 2 et un arr
de longueur 3. Les profondeurs et les longueurs correspondront toujours pour les 1 000 itérations à chaque fois.
Ma question est la suivante. Existe-t-il un moyen de parcourir l'obj
pour ajouter 1
à la valeur de la paire clé-valeur "la plus profonde" à laquelle je dois accéder sans utiliser de récursivité ?
Puis-je construire quelque chose comme ceci ?
obj["male"]["short"] += 1;
Je sais que je peux utiliser la récursivité pour atteindre la profondeur la plus basse de l'obj
, ajouter 1
à la valeur
appropriée et le return
, reconstruire l'obj
à mesure que la fonction récursive continue de return
, cela signifie que je devrais reconstruire l'obj
pour chaque valeur à chaque fois et remplacer l'obj
que je viens de construire sur l'itération précédente, juste pour ajouter 1
à une partie de l'obj
. Cela semble juste mauvais, mais peut-être que cela n'a pas d'importance.
Merci d'avance.