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