Comment vérifier la profondeur d'un objet?
Je suis en train de travailler sur un système de permissions avec une profondeur variable, en fonction de la complexité d'une page, il pourrait y avoir plus ou moins de niveaux. J'ai cherché sur StackOverflow pour savoir si cela a été demandé avant, ne pouvais pas le trouver.
Si j'ai cet objet:
{foo:{bar:{baz : 'baa'}}}
J'en ai besoin pour revenir 3, il dispose de 3 niveaux.
Avec cet objet:
{abc: 'xyz'}
Il aurait à 1.
C'est ce que j'ai à ce jour:
utils.depthOf = function(object, level){
//Returns an int of the deepest level of an object
level = level || 1;
var key;
for(key in object){
if (!object.hasOwnProperty(key)) continue;
if(typeof object[key] == 'object'){
level++;
level = utils.depthOf(object[key], level);
}
}
return level;
}
Le problème est qu'il compte sœur éléments de trop. C'est en fait de ne pas obtenir de la profondeur, c'est le comptage de tous les membres d'un objet.
OriginalL'auteur Kavi Siegel | 2012-11-23
Vous devez vous connecter pour publier un commentaire.
Bien, ici vous allez copain, une fonction qui fait exactement ce dont vous avez besoin!
Beaucoup plus facile que nous avons pensé qu'il serait. La question était de savoir comment il a été incrémenté, il n'aurait pas été de manière récursive l'ajout, au lieu d'obtenir le plus bas et l'ajout d'une, puis de choisir le max entre les deux frères.
Il serait appelé en disant
utils.depthOf({})
- le deuxième paramètre est utilisé uniquement pour la récursivité, c'est pourquoi la deuxième ligne est de dire "le niveau est égal à niveau si le niveau n'est pas faux, si le niveau est faux, le niveau est un"Cela mis à part, cette fonction ne fonctionne pas réellement. Si il y a la sœur éléments, il compte comme profondeur plutôt que de largeur." - Je suis toujours en train de travailler sur ce.
+2 bon 🙂 Si je veux vérifier dom département de l'élément html c'est à dire le document. Comment dois-je appeler cette fonction ?
Vous allez rencontrer un maximum de la pile des appels de problème, plus probable. Le
document
objet est vraiment, vraiment profond. C'est littéralement unestack_overflow
, mais vous pouvez l'appeler par justeutils.depthOf(document)
OriginalL'auteur Kavi Siegel