2011-03-25 15 views
11

Böyle tanımlanan iç nesneler ve özelliklere sahip olan bir amacı adres: bir nesnenin her özellik yinelemebir nesne iç nesneler/özelliği yineleme nasıl

var obj = {obj1 : { "prop1" : "nothing", "prop2" : "prop"}, 
     obj2 : {"prop1" : "nothing", "prop2" : "prop"}, 
     pr1 : "message", 
     pr2 : "mess" 
}; 

Normal olarak, for .. in döngü yapabilir

for (property in obj){ 
    if (obj.hasOwnProperty(property)){ 
     console.log(property + " " + obj[property]); 
    } 
} 

kandırmak konsol görüntülenen:

obj1 [object Object] 
obj12 [object Object] 
pr1 message 
pr2 mess 

Ancak iç nesnelere (obj1, obj2) ve kendi özelliklerine (prop1,prop2) yineleme nasıl yapılır?

function iterate(obj) { 
    for (var property in obj) { 
     if (obj.hasOwnProperty(property)) { 
      if (typeof obj[property] == "object") 
       iterate(obj[property]); 
      else 
       console.log(property + " " + obj[property]); 
     } 
    } 
} 

Not:

cevap

30

Özyineleme senin arkadaşın var kullanarak yerel property beyan etmeyi unutmayın!

+1

beni 2 saniye yendi:] –

+0

çok teşekkürler! Evet, eğer varyantı ** ilan etmeyi unutursam, mülkiyet global –

5

Bunu başarmak için özyinelemeye kullanabilirsiniz:

function Props(obj) { 

function getProps(obj){ 
    for (var property in obj) { 
    if (obj.hasOwnProperty(property)){ 
     if (obj[property].constructor == Object) { 
      console.log('**Object -> '+property+': '); 
      getProps(obj[property]); 
     } else { 
      console.log(property + " " + obj[property]); 
     } 
    } 
    } 
} 
getProps(obj); 
} 

bkz http://jsfiddle.net/KooiInc/hg6dU/

+0

Cevabınız doğru ama 1 dakika sonra birkaç dakika sonra. Yine de oylamaya değer. –

+1

Elbette benimle güzel ama belki de kabul edilen cevabın “yineleme” fonksiyonunu nesne içindeki bir diziyi kullanarak test etmeyi denemelisiniz (örneğin: {a: [1,2,3], b: 3, c: {a : 1, b: 1} '}? – KooiInc

3

basitçe nesne yapısını görüntülemek için, sık sık kullanın: console.log (JSON.stringify (obj))

4

Bu harika anwsers, dizi durumları kapsanmasa da, işte benim katkım:

var getProps = function (obj) { 
    for (var property in obj) { 
     if (obj.hasOwnProperty(property) && obj[property] != null) { 
      if (obj[property].constructor == Object) { 
       getProps(obj[property]); 
      } else if (obj[property].constructor == Array) { 
       for (var i = 0; i < obj[property].length; i++) { 
        getProps(obj[property][i]); 
       } 
      } else { 
       console.log(obj[property]); 
      } 
     } 
    } 
} 
getProps(myObject); 
+0

Ve özellikler dizileri de dizeleri olabilir, özellikle örtme dizisi önemlidir - aksi halde, çıktı olarak rasgele çöp alırsınız veya çağrı yığını boyutunu aşarsınız. –