2009-02-17 15 views
248

की सूची प्राप्त करना मैं जावास्क्रिप्ट में एक साहचर्य सरणी है:साहचर्य सरणी कुंजी

var dictionary = { 
    "cats": [1,2,3,4,5], 
    "dogs": [6,7,8,9,10] 
}; 

मैं इस शब्दकोश की कुंजी कैसे प्राप्त करूं? यानी मैं 7 साल बाद चाहते

var keys = ["cats", "dogs"]; 

संपादित करें: बस शब्दावली सही पाने के लिए - वहाँ जावास्क्रिप्ट में एक 'साहचर्य सरणी' जैसी कोई चीज नहीं है - यह तकनीकी रूप से सिर्फ एक object है और यह वस्तु है चाबियाँ हम चाहते हैं।

+0

के साथ सरल तरीका lodash जे एस - https://lodash.com/docs#keys –

उत्तर

72

आप उपयोग कर सकते हैं: Object.keys(obj)

उदाहरण:

var dictionary = {"cats":[1,2,37,38,40,32,33,35,39,36], "dogs": [4,5,6,3,2]}; 

// Get the keys 
var keys = Object.keys(dictionary); 

नीचे ब्राउज़र के लिए समर्थन संदर्भ देखें। यह फ़ायरफ़ॉक्स 4.20, क्रोम 5, आईई 9 में समर्थित है। नीचे दिए गए लिंक में एक कोड स्निपेट है जिसे आप जोड़ सकते हैं यदि Object.keys() आपके ब्राउज़र में समर्थित नहीं है।

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/keys

+0

मैं इसे अब स्वीकार्य उत्तर में बदल रहा हूं। केवल आईई 8 अब इसका समर्थन नहीं करता है (जिसके लिए एक पॉलीफिल उपलब्ध है https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys) –

380

इस प्रयास करें:

var keys = []; 
for (var key in dictionary) { 
    if (dictionary.hasOwnProperty(key)) { 
    keys.push(key); 
    } 
} 

hasOwnProperty की जरूरत है, क्योंकि यह dictionary के प्रोटोटाइप वस्तु में कुंजी सम्मिलित करने के लिए संभव है। लेकिन आप आमतौर पर उन चाबियों को अपनी सूची में शामिल नहीं करना चाहते हैं।

उदाहरण के लिए, यदि आप ऐसा करते हैं:

Object.prototype.c = 3; 
var dictionary = {a: 1, b: 2}; 

और फिर dictionary पर एक for...in पाश करते हैं, आप a और b मिल जाएगा, लेकिन आप भी c मिलेगा।

+36

+1 .hasOwnProperty() – MrFox

+0

घोषित करने के लिए कोई ज़रूरत नहीं के लिए "var कुंजी = []", आप पाश के बाद इसका इस्तेमाल करने की जरूरत है जब तक । – mzalazar

+2

@mzalazar, आप बेहतर करते हैं या यह एक वैश्विक चर होगा, जो खराब अभ्यास है। – b00t

183
for (var key in dictionary) { 
    // do something with key 
} 

यह for..in statement है।

+1

बस ध्यान दिया गया कि "कुत्तों" और उपरोक्त सरणी के बीच अल्पविराम के बजाय एक कोलन होना चाहिए। मान लीजिए कि यह प्रतिलेखन के कारण है। – wombleton

+68

'dictionary.hasOwnProperty (कुंजी)' की जांच करने के लिए बहुत महत्वपूर्ण है अन्यथा आप प्रोटोटाइप श्रृंखला से विधियों के साथ समाप्त हो सकते हैं .. – Tigraine

+4

उसी लेख से: _ किसी ऑब्जेक्ट के समरूप गुणों पर मनमाने ढंग से क्रमबद्ध करता है। यदि कुंजी ऑर्डर महत्वपूर्ण है, तो आपको किसी सरणी में उन्हें धक्का देने, इसे सॉर्ट करने, और उसके बाद सॉर्ट किए गए सरणी से कुंजी प्राप्त करने के लिए() लूप का उपयोग करने की आवश्यकता होती है जिसके साथ मूल ऑब्जेक्ट को अनुक्रमणित किया जाता है। – mcmlxxxvi

16

बस एक त्वरित नोट, यदि आप लाइब्रेरी (jQuery, प्रोटोटाइप इत्यादि) का उपयोग करते हैं तो for..in का उपयोग करने से सावधान रहें, क्योंकि उनमें से अधिकांश ऑब्जेक्ट्स (शब्दकोशों सहित) बनाने के तरीकों को जोड़ते हैं।

इसका मतलब यह होगा कि जब आप उन पर लूप करेंगे, विधि नाम कुंजी के रूप में दिखाई देंगे। यदि आप लाइब्रेरी का उपयोग कर रहे हैं, तो दस्तावेज़ीकरण को देखें और एक संख्यात्मक अनुभाग देखें, जहां आपको अपनी वस्तुओं के पुनरावृत्ति के लिए सही तरीके मिलेंगे।

3

सरल jQuery रास्ता।

मैं यही उपयोग करता हूं
DictionaryObj जावास्क्रिप्ट शब्दकोश वस्तु है जिसे आप जाना चाहते हैं। मूल्य, कुंजीपटल शब्दकोश में उनके नाम होने का कारण है।

$.each(DictionaryObj, function (key, value) { 
      $("#storeDuplicationList") 
       .append($("<li></li>") 
       .attr("value", key) 
       .text(value)); 
     }); 
+1

इसके लिए jQuery की आवश्यकता है (जो है ठीक है) लेकिन आप इसका उल्लेख करना भूल गए :-) –

+0

@Exzile आपकी फ़ंक्शन परिभाषा में तर्क नाम बहुत भ्रमित हैं। यह https://api.jquery.com/jquery.each/ पर कहता है कि कॉलबैक फ़ंक्शन (स्ट्रिंग प्रॉपर्टीनाम, ऑब्जेक्ट वैल्यूऑफप्रोपर्टी) है। आपके नाम रिवर्स को इंगित करते हैं। – Chris

+0

@ क्रिस मैं आपके लिए इसे अपडेट कर दूंगा। यह बात बताने के लिए धन्यवाद। – Exzile

0

मैं वर्तमान में रोब डे ला क्रूज़ के जवाब का उपयोग कर रहा

Object.keys(obj) 

और एक फ़ाइल के शुरू में भरी हुई पर मैं कोड इंटरनेट पर कहीं से उधार की कुछ पंक्तियाँ जो पुराने के मामले को कवर है स्क्रिप्ट दुभाषियों की संस्करणों कि Object.keys में निर्माण किया है नहीं है

if (!Object.keys) { 
    Object.keys = function(object) { 
     var keys = []; 
     for (var o in object) { 
      if (object.hasOwnProperty(o)) { 
       keys.push(o); 
      } 
     } 
     return keys; 
    }; 
} 

मुझे लगता है कि यह बड़ी परियोजनाओं के लिए दोनों दुनिया का सबसे अच्छा है।: ब्राउज़र के पुराने संस्करणों के लिए सरल आधुनिक कोड और पीछे संगत समर्थन इत्यादि।

प्रभावी रूप से यह रोब डे ला क्रूज़ की ऑब्जेक्ट.की (ओबीजे) मूल रूप से उपलब्ध नहीं होने पर जेडब्ल्यू के समाधान को कार्यान्वित करता है।

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