цикличное выполнение через объект (дерево) рекурсивно

Существует ли путь (в 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
53
задан Tamás Sengel 13 September 2017 в 03:49
поделиться

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... 
    }
}
88
ответ дан 7 November 2019 в 08:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: