gpt4 book ai didi

javascript - 如何遍历javascript对象中的所有子文档?

转载 作者:行者123 更新时间:2023-11-28 03:35:55 25 4
gpt4 key购买 nike

我想遍历一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com