Como verificar a profundidade de um objeto?
Eu estou trabalhando em um sistema de permissões com profundidade variável; dependendo da complexidade de uma página, pode haver mais ou menos níveis. Eu procurei o StackOverflow para descobrir se isso foi perguntado antes, não consegui encontrá-lo.
Se eu tiver esse objeto:
{foo:{bar:{baz : 'baa'}}}
Preciso retornar 3, tem 3 níveis.
Com este objeto:
{abc: 'xyz'}
Teria que ser 1.
Isto é o que eu tenho até agora:
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;
}
O problema é que conta também os elementos irmãos. Na verdade, não está obtendo profundidade, está contando todos os membros de um objeto.