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

如何遍历javascript对象中的所有子文档?,javascript,recursion,Javascript,Recursion,我想遍历一个javascript对象中的所有子文档,该对象在数组child中可能有多个子对象,但递归执行时会出现故障 只有当我退出2个或更多递归时,它才会同时退出整个操作。如果对象只有一个子对象,则效果非常好。一个对象可以有多个子对象。子对象数量的任何不规则模式都会破坏递归。 我在node和firefox中尝试过这个,但结果相同 foo={name:"a",child:[ {name:"b",child:[ {name:"c",child:[ {name:"d",chil

我想遍历一个javascript对象中的所有子文档,该对象在数组child中可能有多个子对象,但递归执行时会出现故障

只有当我退出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);
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