1. ホーム
  2. javascript

再帰的にオブジェクト(ツリー)をループする

2023-12-02 22:03:37

質問

各オブジェクトとその子や孫などのオブジェクトをループさせる方法(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

どのように解決するのですか?

あなたが探しているのは 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... 
    }
}