一尘不染

递归遍历对象(树)

javascript

有没有一种方法(在jQuery或JavaScript中)循环遍历每个对象以及子对象和孙子对象等等?

如果是的话…我还能读他们的名字吗?

例:

foo :{
  bar:'',
  child:{
    grand:{
      greatgrand: {
        //and so on
      }
    }
  }
}

所以循环应该做这样的事情…

loop start
   if(nameof == 'child'){
     //do something
   }
   if(nameof == 'bar'){
     //do something
   }
   if(nameof =='grand'){
     //do something
   }
loop end

阅读 645

收藏
2020-04-25

共1个答案

一尘不染

您正在寻找for...in循环:

for (var key in foo)
{
    if (key == "child")
        // do something...
}

请注意,for...in循环将遍历任何可枚举的属性,包括那些添加到对象原型的属性。为了避免作用于这些属性,可以使用hasOwnProperty方法检查该属性是否仅属于该对象:

for (var key in foo)
{
    if (!foo.hasOwnProperty(key))
        continue;       // skip this property
    if (key == "child")
        // do something...
}

递归执行循环就像编写递归函数一样简单:

// This function handles arrays and objects
function eachRecursive(obj)
{
    for (var k in obj)
    {
        if (typeof obj[k] == "object" && obj[k] !== null)
            eachRecursive(obj[k]);
        else
            // do something... 
    }
}
2020-04-25