2011-03-25 6 views
11

मैंने किसी चीज़ जो आंतरिक है और गुण, इस तरह परिभाषित किया गया है है एक वस्तु के हर संपत्ति दोहराने मेंएक वस्तु में आंतरिक वस्तुओं/संपत्ति पर पुनरावृति करने के लिए कैसे

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

आम तौर पर, for .. in पाश कर सकते हैं चाल

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

सांत्वना दिखाया गया:

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

हालांकि आंतरिक वस्तुओं (obj1, obj2) और उनके गुणों को फिर से कैसे सक्रिय किया जाए (prop1,prop2)?

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]); 
     } 
    } 
} 

नोट:

उत्तर

30

Recursion अपने दोस्त है भूल नहीं है स्थानीय स्तर पर property घोषित करने के लिए var का उपयोग कर!

+1

ने मुझे 2 सेकंड से हराया:] –

+0

बहुत बहुत धन्यवाद! यह सच है कि अगर मैं ** var property ** घोषित करना भूल जाता हूं, तो संपत्ति वैश्विक है –

5

आप प्राप्त करने के लिए है कि प्रत्यावर्तन का उपयोग कर सकते हैं:

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); 
} 

देख http://jsfiddle.net/KooiInc/hg6dU/

+0

उत्तर सही है लेकिन 1rst से कुछ मिनट बाद। फिर भी यह वोट करने लायक है। –

+1

निश्चित रूप से मेरे साथ ठीक है, लेकिन हो सकता है कि आपको ऑब्जेक्ट के भीतर किसी सरणी का उपयोग करके स्वीकृत उत्तर के 'पुनरावृत्त' फ़ंक्शन का परीक्षण करने का प्रयास करना चाहिए (जैसे '{a: [1,2,3], b: 3, c: {a : 1, बी: 1} '}? – KooiInc

3

बस वस्तु संरचना दिखाने के लिए, मैं अक्सर उपयोग करें: console.log (JSON.stringify (obj))

4

यह बहुत अच्छा है, हालांकि सरणी के मामलों को कवर नहीं किया गया है, यहां मेरा योगदान है:

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

और सरणी को कवर करना विशेष रूप से महत्वपूर्ण होता है जब गुण स्ट्रिंग भी हो सकते हैं - अन्यथा आपको आउटपुट के रूप में यादृच्छिक कचरा मिल जाएगा, या आप कॉल स्टैक आकार से अधिक हो जाएंगे। इसके लिए +1 –

संबंधित मुद्दे

 संबंधित मुद्दे