如何迭代对象中的内部对象/属性
我有一个对象具有像这样定义的内部对象和属性:
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); }
这是伟大的投资者,虽然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))