我试图遍历一个对象树,并使用递归打印出对象中的所有属性,包括嵌套属性。这是我的代码,但它被卡在循环中,我不确定我错过了什么。
var data = {
person: {
firstName: 'Mary'
},
color: 'blue'
};
function walk(root) {
for(var i in root) {
if(root.hasOwnProperty(i)) {
console.log(i);
if ( root[i] !== null && root[i] !== undefined && typeof(root[i] == 'object') ) {
walk(root[i]);
}
}
}
}
walk(data);
答案 0 :(得分:1)
注意: 此解决方案已更新为横向嵌套数组。
只是想关闭这个问题这就是为什么我花了一些时间来解决它,即使你现在可能正在玩他的调试工具(见评论)。
我遇到此问题的方法是使用instanceof
API解决它。
查看:强>
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/instanceof
这样我就不需要额外的代码来做那些长篇大论的检查,比如
root.hasOwnProperty(i)
if ( root[i] !== null && root[i] !== undefined && typeof(root[i] == 'object') )
示例:强>
var data = {
person: {
firstName: 'Mary',
likes: {
food: "apple",
drinks: "water",
d: null,
x : {
y: "z",
ddd: [
{ bbb: "lol"},
{ PPP: "lol2"}
]
},
o: undefined
}
},
color: 'blue'
};
function walk(root) {
for (let property in root) {
console.log(property);
if (root[property] instanceof Array)
root[property].forEach(item => { walk(item); });
else if (root[property] instanceof Object)
walk(root[property]);
// Extend else if statement to handle customize structures appropriately.
}
}
walk(data);
<强>输出:强>
person
firstName
likes
food
drinks
d
x
y
ddd
e
bbb
PPP
o
color