如何迭代对象中的内部对象/属性

我有一个对象具有像这样定义的内部对象和属性:

var obj = {obj1 : { "prop1" : "nothing", "prop2" : "prop"}, obj2 : {"prop1" : "nothing", "prop2" : "prop"}, pr1 : "message", pr2 : "mess" }; 

通常为了遍历一个对象的每个属性, for .. in循环可以做到这一点

 for (property in obj){ if (obj.hasOwnProperty(property)){ console.log(property + " " + obj[property]); } } 

显示的控制台:

 obj1 [object Object] obj12 [object Object] pr1 message pr2 mess 

但是如何迭代内部对象( obj1, obj2 )和他们自己的属性( prop1,prop2 )呢?

recursion是你的朋友:

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

注意 :不要忘记使用var !在本地声明property

你可以使用recursion来实现:

 function Props(obj) { function getProps(obj){ for (var property in obj) { if (obj.hasOwnProperty(property)){ if (obj[property].constructor == Object) { console.log('**Object -> '+property+': '); getProps(obj[property]); } else { console.log(property + " " + obj[property]); } } } } getProps(obj); } 

http://jsfiddle.net/KooiInc/hg6dU/

这是伟大的投资者,虽然arrays案件不覆盖,这是我的贡献:

 var getProps = function (obj) { for (var property in obj) { if (obj.hasOwnProperty(property) && obj[property] != null) { if (obj[property].constructor == Object) { getProps(obj[property]); } else if (obj[property].constructor == Array) { for (var i = 0; i < obj[property].length; i++) { getProps(obj[property][i]); } } else { console.log(obj[property]); } } } } getProps(myObject); 

为了简单地显示对象结构,我经常使用:console.log(JSON.stringify(obj))