jQuery – 如何递归循环对象的嵌套属性?

是否有一种方法可以递归循环遍历JS / jQuery对象的所有嵌套属性?

例如,给定此对象

var x = { 'name': 'a', 'level': 1, 'children': [{ 'name': 'b', 'level': 2, 'children': [{ 'name': 'c', 'level': 3, 'children': [{ ... }] }]}, ... }] } 

我怎么能无限制地圈出名为’a’的对象和他们的孩子,’b’和他们的孩子,’c’和他们的孩子?

递归方法看起来最好,如下所示:

 function recursiveIteration(object) { for (var property in object) { if (object.hasOwnProperty(property)) { if (typeof object[property] == "object"){ recursiveIteration(object[property]); }else{ //found a property which is not an object, check for your conditions here } } } } 

这是一个工作小提琴

您的JSON格式不正确,但您可以“访问”每个项目,如下所示:

   test     

我原本想找一种递归搜索javascript对象的方法,我发现这篇文章非常有用,特别是Jeroen Moons的回答。 我已经调整它以提供返回对象。 输入是搜索对象{key:value}对象(针)。

 function searchObject(object, keyvalue){ var found = false; for (var property in object){ if (object.hasOwnProperty(property)){ if (typeof object[property] == 'object'){ found = searchObject(object[property], keyvalue); if (found) return found; }else{ key = Object.keys(keyvalue)[0]; if (property == key && object[key] == keyvalue[key]){ console.log('searchObject ' + keyvalue[key] + ' found'); return object; } } } } } 
 var x = { 'name': 'a', 'level': 1, 'children': [{ 'name': 'b', 'level' : 2, 'children' : [{ 'name': 'c', 'level' : 3, 'children' : [{ }] }] }, { 'name': 'b2', 'level' : 2, 'children' : [{ 'name': 'c2', 'level' : 3, 'children' : [{ }] }] }] } var step = x; do { if (step instanceof Array){ for (i=0; i < step.length; i++) { callback(step[i]); } } else { callback(step); } step = step.children != undefined ? step.children : null; } while (step); function callback (element) { console.log(element); } 

只要结构不变,你就可以这样下去。

 function iterate(obj){ for(var key in obj) { if(typeof(obj["key"]) == "object"){ iterate(obj["key"]); } else{ console.log(key + ": " + obj["key"]; } } }