2012-04-26 12 views
49

मुझे फ़ॉलो करने के लिए मुख्य नाम कैसे मिलेगा? उदा। मुझे "बटन 1" और "बटन 2" चाहिए?जावास्क्रिप्ट ऑब्जेक्ट कुंजी नाम प्राप्त करें

var buttons = { 
    button1: { 
     text: 'Close', 
     onclick: function(){ 

     } 
    }, 
    button2: { 
     text: 'Close2', 
     onclick: function(){ 

     } 
    } 
} 

var i; 
for(i in buttons){ 
    if(buttons.hasOwnProperty(i)){ 
     alert(buttons[i].text); 
    } 
} 

मैं हालांकि यह काम नहीं किया .push() उपयोग करने की कोशिश।

+5

यदि आपका कुंजी नाम वास्तव में 'button1',' button2' और इतने पर कर रहे हैं, आप कर सकते हैं कि 'buttons' एक सरणी – Zirak

उत्तर

61

यह बेहतर समझा जा सकता है यदि आप शब्दों के ऊपर थोड़ा संशोधित: यहां

var buttons = { 
    foo: 'bar', 
    fiz: 'buz' 
}; 

for (property in buttons) { 
    console.log(property); // Outputs: foo, fiz or fiz, foo 
} 

ध्यान दें कि आप ऑब्जेक्ट के गुणों को अधिक पुनरावृत्ति कर रहे हैं, प्रत्येक अनुवर्ती चक्र के दौरान प्रत्येक के लिए एक संदर्भ के रूप में उपयोग करते हुए property

एक पाश के प्रत्येक यात्रा से पहले, चर वस्तु या सरणी के अगले तत्व सूचकांक की अगली संपत्ति नाम असाइन किया गया है:

MSDN निम्नलिखित for (variable in [object | array ]) की कहते हैं। इसके बाद आप ऑब्जेक्ट की संपत्ति या सरणी के तत्व को संदर्भित करने के लिए लूप के अंदर किसी भी कथन में इसका उपयोग कर सकते हैं।

ध्यान दें कि ऑब्जेक्ट का प्रॉपर्टी ऑर्डर निरंतर नहीं है, और सरणी के इंडेक्स ऑर्डर के विपरीत बदल सकता है। यह आसान हो सकता है।

+0

कैसे आप foo मिलेंगे? – Demodave

+0

@ डेमोडाव * foo * संपत्ति का मान प्राप्त करने के लिए, आप इसे 'बटन' ऑब्जेक्ट से बस कॉल करेंगे: 'बटन.फू === बटन ['foo']'। लूप के भीतर से, आप 'बटन [संपत्ति]' कॉल करेंगे। आज आप 'Array.entries ({foo: "bar", fizz: "buzz"} का उपयोग भी कर सकते हैं)' आउटपुट '[[' foo ':' bar '], [' fizz ',' buzz ']]' । – Sampson

34

ईसीएमएस्क्रिप्ट संस्करण 5 आपको स्वच्छ तरीके Object.keys() और Object.getOwnPropertyNames() प्रदान करता है।

तो

Object.keys(buttons); // ['button1', 'button2']; 
4

यह मानते हुए कि आप प्रोटोटाइप की पहुंच है, इस काम कर सकता था। मैंने कुछ मिनट पहले खुद के लिए यह कोड लिखा था; मुझे केवल एक ही कुंजी की आवश्यकता होती है, इसलिए यह कुंजी की बड़ी सूचियों के लिए समय प्रभावी नहीं है: मूल्य जोड़े या एकाधिक कुंजी नामों को थूकने के लिए।

function key(int) { 
    var j = -1; 
    for(var i in this) { 
     j++; 
     if(j==int) { 
      return i; 
     } else { 
      continue; 
     } 
    } 
} 
Object.prototype.key = key; 

यह उसी तरह सरणियों है कि, सिर दर्द को बचाने के लिए काम करने के लिए गिने है। अपने कोड के मामले में:

buttons.key(0) // Should result in "button1" 
संबंधित मुद्दे