var object = {
"apple": {
"orange": {
"chilli": {},
"pineapple": {
"mango": {}
}
},
"carrot": {
"cabbage": {
"cherries":{}
},
"onion": {}
}
}
}
var maxLevel = 0;
var maxPaths = [];
function findDeepest(obj, level, path) {
var keys = Object.keys(obj) // get keys
for(var i=0; i< keys.length; i++) {
var newPath = level !== 0 ? path + "." + keys[i] : keys[i] // construct path string
// Recursively call
findDeepest(obj[keys[i]], level + 1, newPath )
}
if (level > maxLevel) { // There is a deeper key
maxLevel = level
maxPaths = [path] // create a fresh list
} else if (level === maxLevel) {
maxPaths.push(path) // add key to the list, as it has the same depth
}
}
findDeepest(object, 0, "")
console.log(maxLevel)
console.log(maxPaths)
Вышеприведенная функция рекурсивно обходит весь объект и производит сравнение на основе глубины.Если глубина больше, чем какой-либо ключ, встреченный ранее (я проверил это с помощью глобальных переменных, что не является хорошей практикой), он обновляет глубину и путь.Если есть другой ключ с таким же значением maxDepth, он также добавляется в список maxPaths
.После завершения рекурсии ваши переменные maxLevel
и maxPaths
дают вам самый глубокий ключ с его путем и уровнем.