我有一个对象,其内部对象和属性定义如下:
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
)?
答案 0 :(得分:35)
递归是你的朋友:
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]);
}
}
}
注意:不要忘记使用property
在本地声明var
!
答案 1 :(得分:10)
这是伟大的安卓,虽然没有涵盖阵列案例,但这是我的贡献:
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);
答案 2 :(得分:5)
您可以使用递归来实现:
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);
}
答案 3 :(得分:5)
要简单地显示对象结构,我经常使用:console.log(JSON.stringify(obj))