2012-05-04 7 views
0

私は再帰関数を使って、ネストされたプロパティなどを含むオブジェクトのすべての属性とプロパティを読み取ることができるのだろうかと思います。私は、オブジェクトがある場合、たとえば、 は:再帰を使用してオブジェクトの属性とプロパティを読み取るか?

var mObj = {}; 
    mObj.countries = []; 
    mObj.country = {}; 
    mObj.country.states = []; 
    mObj.country.state = {}; 
    mObj.country.state = {}; 

を私はあなたが画像を取得すると確信しています。単純なオブジェクトであれば、 "for in"ループを使用でき、おそらくネストされた "for in"ループを使用できます。オブジェクトには多数のネストされたレベルがあり、ネストされた "for"ループを使用すると多少混乱します。再帰を使うのはすばらしいと思いました。これに役立つ洞察は非常に高く評価されます。

ありがとうございます。

+1

私はあなたが再帰を使用する必要があると言いたいと思います。絶対に正しい観測。だから、それを撮って、コードを投稿して、あなたが持っている問題を教えてください。 – ControlAltDel

+0

私は今日遅く、私は写真を手に入れません。あなたは擬似入力Objectで詳しく説明し、出力の種類を記述できますか?同様に、mObjを指定すると、それらのmObj.countries、statesが埋め込まれますか? –

+0

あなたが 'console.log()'オブジェクトを使うと、Chromeの開発ツール(またはFirebug、私は信じています)は、すべてのプロパティを再帰的に出力します。デバッグ以外の目的でこの情報を使用する場合を除き、開発するためにそれらのいずれかを使用することをお勧めします。 –

答えて

3

これは、問題が発生した場合に備えて、これを行う簡単な例です。

+0

ありがとうございました。これは本当に役立ちます。今私はこれに取り組む方法を知っています。素晴らしい。 – Combustion007

0

OPと同じ問題がありましたが、受け入れられた解決策が正しく機能しませんでした。ここで私は何をやったのですか:

function foreachAttribute(object, handleAttributeName, handleAttributeValue) { 

    var attributeNames = []; 
    function recursion(object) { 

     for (var attribute in object) { 

      if (typeof object[attribute] == 'object') { 

       attributeNames.push(attribute); 
       recursion(object[attribute]); 
       attributeNames = attributeNames.slice(0, 
         attributeNames.length - 1); 

      } else { 

       handleAttributeName(attributeNames.join(".") + "." 
         + attribute); 
       handleAttributeValue(object[attribute]); 

      } 

     } 

    } 

    recursion(object); 

} 

var attributeName = ""; 
var handleAttributeName = function(name) { 
    attributeName = name; 
}; 

var handleAttributeValue = function(value) { 
    console.log(attributeName + "=" + value); 
}; 

var data = { 
    var1 : { 
     asdf : 123 
    }, 
    var2 : 321 
}; 

foreachAttribute(data, handleAttributeName, handleAttributeValue); 
関連する問題