如何遍历javascript对象中的所有子文档?
我想遍历一个javascript对象中的所有子文档,该对象在数组child中可能有多个子对象,但递归执行时会出现故障 只有当我退出2个或更多递归时,它才会同时退出整个操作。如果对象只有一个子对象,则效果非常好。一个对象可以有多个子对象。子对象数量的任何不规则模式都会破坏递归。 我在node和firefox中尝试过这个,但结果相同如何遍历javascript对象中的所有子文档?,javascript,recursion,Javascript,Recursion,我想遍历一个javascript对象中的所有子文档,该对象在数组child中可能有多个子对象,但递归执行时会出现故障 只有当我退出2个或更多递归时,它才会同时退出整个操作。如果对象只有一个子对象,则效果非常好。一个对象可以有多个子对象。子对象数量的任何不规则模式都会破坏递归。 我在node和firefox中尝试过这个,但结果相同 foo={name:"a",child:[ {name:"b",child:[ {name:"c",child:[ {name:"d",chil
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);
foo={name:“a”,子项:[
{姓名:“b”,子女:[
{姓名:“c”,儿童:[
{姓名:“d”,子女:[
{姓名:“e”,子女:[]},
{姓名:“f”,子女:[
{姓名:“g”,子女:[
{姓名:“h”,子项:[]}
]}
]}/*递归在此崩溃*/,
{姓名:“我”,子女:[]}
]},
{姓名:“j”,子女:[
{名称:“k”,子项:[null]}
]}
]}
]}
]};
函数递归显示(doc){
process.stdout.write(doc.name+“”);
对于(i=0;i递归函数有两个问题:迭代器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]);
}
}
}
函数递归显示(doc){
process.stdout.write(doc.name+“”);
对于(设i=0;i我将这样做:
function recursiveDisplay(doc) {
console.log(doc.name + " ")
doc.child.filter(Boolean).forEach(rec)
}
为了去除null
和undefined
值,我取child
数组,过滤掉falsy
值(因此任何false
,undefined
,null
等),然后对每个值调用recursiveDisplay