怎么递归输出这个对象?
var orz = {
it: {
facebook: {
apple: {
google: {
twitter: {}
},
microsoft: {}
}
}
},
china: {}
};
function objLength(obj) {
var j = 0;
for (i in obj) {
j++;
}
return j;
}
function re(ja, num, tree, jn) {
if (objLength(ja) == 0) {
return;
}
if ("undefined" == typeof num) {
num = 0;
}
if ("undefined" == typeof tree) {
tree = [];
}
if ("undefined" != typeof jn) {
tree.push(jn);
}
num++;
fo(ja, tree, num);
function fo(a, b, c) {
for (x in a) {
if (b.length > 0) {
console.log(c + ": " + b + "," + x);
} else {
console.log(c + ": " + x);
}
re(a[x], c, b, x);
}
}
}
re(orz);
/**
* 为什么结果是:
* 1: it
* 2: it,facebook
* 3: it,facebook,apple
* 4: it,facebook,apple,google
* 5: it,facebook,apple,google,twitter
* 4: it,facebook,apple,google,microsoft
* 1: it,facebook,apple,google,china
* 而不是
* 1: it
* 2: it,facebook
* 3: it,facebook,apple
* 4: it,facebook,apple,google
* 5: it,facebook,apple,google,twitter
* 4: it,facebook,apple,microsoft
* 1: china
*
*/
修改
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
因为你用了push,所以当循环遍历到google时,tree为
["it", "facebook", "apple", "google"]
,接下来console输出的三个记录就是:5: it,facebook,apple,google,twitter
4: it,facebook,apple,google,microsoft
1: it,facebook,apple,google,china
解决方法有两个:
1.push后进行pop操作
2.使用String代替Array