2008-11-04 20 views
6

क्या जावास्क्रिप्ट ऑब्जेक्ट की अंतर्निहित गुणों पर मुझे लूप करने का कोई तरीका है?सूची ऑब्जेक्ट की अंतर्निहित गुण

... मुझे उस स्थान के करीब ले जाता है जहां मैं जाना चाहता हूं, लेकिन "ए ... लूप इन अंतर्निहित गुणों पर पुनरावृत्ति नहीं करता है।"

+0

आप JSON करने के लिए अपने वस्तु stringify और परिणाम को पार्स सकते हैं? – starbeamrainbowlabs

उत्तर

-1

यह जेएसओएन के साथ काम करेगा। इसका अधिक परीक्षण नहीं किया गया है:

<style> 
.tree { 
    margin-left:5px; 
} 
</style> 
<div id='out'></div> 
<script type="text/javascript"> 
data = {"feep":{"bar":{"baz":"37628","quux":{"a":"179","b":"7"}},"foo":"1025"},"Bleh":"1234"} 
$('out').innerHTML = renderJSON(data) 

function renderJSON(obj) { 
    var keys = [] 
    var retValue = "" 
    for (var key in obj) { 
     //$('out').innerHTML = $('out').innerHTML +"<br />" + key + ", " + obj[key]  
     if(typeof obj[key] == 'object') { 
      retValue += "<div class='tree'>" + key      
      retValue += renderJSON(obj[key]) 
      retValue += "</div>" 
     } 
     else { 
      retValue += "<div class='tree'>" + key + " = " + obj[key] + "</div>" 
     } 

     keys.push(key) 
    } 
    return retValue 

} 
</script> 
0

जब आप "गुणों में निर्मित" कहते हैं, तो आप किस गुण के बारे में बात कर रहे हैं?

डगलस Crockford के 'JavaScript - The Good Parts' से:

के लिए बयान में कर सकते हैं एक वस्तु में संपत्ति के नाम के सभी से अधिक पाश। गणन के सभी शामिल होंगे गुण सहित कार्य करता है और प्रोटोटाइप गुण है कि आप में तो यह मान आप नहीं है चाहते को फिल्टर करने के लिए आवश्यक है कोई दिलचस्पी नहीं हो सकता है। सबसे आम फिल्टर hasOwnProperty विधि और typeof का उपयोग कर कार्यों को बाहर करने हैं:

var name; 
for (name in another_stooge) 
{ 
    if (typeof another_stooge[name] !== 'function') { 
     document.writeln(name + ': ' + another_stooge[name]); 
    } 
} 
+0

मेरा विशेष उपयोग केस Array.prototype के अंतर्निहित तरीकों पर गिन रहा है। एमडीसी कोर जावास्क्रिप्ट संदर्भ से: "ए के लिए ... लूप में अंतर्निहित गुणों पर पुनरावृत्ति नहीं करता है।" Array.prototype पर कौन सा सरल लूप पुष्टि करता है। –

5

जवाब नहीं है। आप उन गुणों की गणना नहीं कर सकते जो संख्यात्मक नहीं हैं। हालांकि इसके आसपास कम से कम दो तरीके हैं।

पहला परीक्षण गुणों के नाम के रूप में उपयोग करने के लिए पात्रों के सभी संभावित संयोजन उत्पन्न करना है (सोचें: ए, बी, सी, ... एए, एबी, एसी, विज्ञापन, ...)। यह देखते हुए कि मानक समुदाय वास्तव में लंबे विधि के नामों के साथ आने के लिए प्रसिद्ध है (getElementsByTagNames, propertyIsNumerable) इस विधि को कुछ धैर्य की आवश्यकता होगी। :-)

एक और दृष्टिकोण कुछ पूर्वनिर्धारित सूची से ज्ञात मूल गुणों के परीक्षण के लिए है।

उदाहरण के लिए: एक array के लिए आप Function.prototype के सभी ज्ञात देशी संपत्तियों के लिए परीक्षण होगा:

prototype caller constructor length name apply call toSource toString valueOf toLocaleString 

... और चीजों Object.prototype से विरासत में मिला:

__defineGetter__ __defineSetter__ hasOwnProperty isPrototypeOf __lookupGetter__ 
__lookupSetter__ __noSuchMethod__ propertyIsEnumerable unwatch watch 

... और चीजों को विरासत में मिला Array से:

index input pop push reverse shift sort splice unshift concat join slice indexOf lastIndexOf 
filter forEach every map some reduce reduceRight 

अंत में ..और, और वैकल्पिक, वस्तु के हर गणनीय संपत्ति परीक्षण किए जाने:

for (var property in myArrayObject) myPossibleProperties.push(property); 

फिर आप अगर वे वस्तु दृष्टान्त पर मौजूद हैं देखने के लिए उन में से हर एक का परीक्षण करने में सक्षम हो जाएगा।

यह अज्ञात गैर-संख्यात्मक सदस्यों (अनियंत्रित, या अन्य स्क्रिप्ट द्वारा सेट) को प्रकट नहीं करेगा, लेकिन आपको यह सूचीबद्ध करने की अनुमति देगा कि कौन से मूल गुण उपलब्ध हैं।

मुझे Mozilla Developer Center और MSDN पर देशी Array गुणों पर जानकारी मिली।

-1

नहीं, आप ऑब्जेक्ट के निर्मित गुणों को सूचीबद्ध नहीं कर सकते हैं। लेकिन आप कार्यान्वयनकर्ता के संदर्भ को संदर्भित कर सकते हैं। उदाहरण के लिए, सभी तरीकों और फ़ायरफ़ॉक्स पर लागू गणित ऑब्जेक्ट के गुणों को पता करने के लिए, आप Firefox के जावास्क्रिप्ट गणित संदर्भ का उपयोग करेंगे: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Math

17

मुझे पता है इस सवाल का तीन साल पुराना है, लेकिन अब, ES5 साथ, यह संभव है :

>>> Object.getOwnPropertyNames(Object)

["prototype", "getPrototypeOf", "getOwnPropertyDescriptor", "keys", "defineProperty", "defineProperties", "create", "getOwnPropertyNames", "isExtensible", "preventExtensions", "freeze", "isFrozen", "seal", "isSealed", "length", "arity", "name", "arguments", "caller"]

+3

थोड़ा सा स्पष्टीकरण के लिए, Object.getOwnPropertyNames (ऐरे) ऐरे के लिए अंतर्निहित गुण प्रदान करता है। – forforf

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