作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想遍历一个 javascript 对象中的所有子文档,该对象可能在数组子元素内有多个子元素,但当我递归执行时它会崩溃。
只有当我退出 2 个或更多递归时才会发生这种情况,它会一起退出整个操作。如果对象只有一个统一的子对象,那么它工作得很好。一个对象可以有多个子对象。子代数量的任何不规则模式都会破坏递归。我在 Node 和 Firefox 中尝试过,但结果相同。
foo={name:"a",child:[
{name:"b",child:[
{name:"c",child:[
{name:"d",child:[
{name:"e",child:[]},
{name:"f",child:[
{name:"g",child:[
{name:"h",child:[]}
]}
]}/*recursion crashes here*/,
{name:"i",child:[]}
]},
{name:"j",child:[
{name:"k",child:[null]}
]}
]}
]}
]};
function recursiveDisplay(doc){
process.stdout.write(doc.name+" ");
for(i=0;i<doc.child.length;i++){
recursiveDisplay(doc.child[i]);
}
}
recursiveDisplay(foo);
预期结果:a b c d e f g hi j k ,
实际结果:a b c d e f g h
最佳答案
递归函数有两个问题:迭代器i
是一个全局变量,因此递归调用将覆盖该值,导致您看到的提前退出。这可以通过使用带有 let i=0
的本地迭代器来修复。
其次,没有检查 null
,这会在您到达 "k"
时导致问题。以下应该可以解决这两个问题:
function recursiveDisplay(doc){
process.stdout.write(doc.name+" ");
for(let i=0;i<doc.child.length;i++){
if (doc.child[i]){
recursiveDisplay(doc.child[i]);
}
}
}
关于javascript - 如何遍历javascript对象中的所有子文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57745062/
我是一名优秀的程序员,十分优秀!