var dict = []; // create an empty array
dict.push({
key: "keyName",
value: "the value"
});
// repeat this last part as needed to add more key/value pairs
मूल रूप से, आप 2 गुण (बुलाया key
और value
) के साथ एक वस्तु शाब्दिक बना रहे हैं और इसे push()
सरणी में डाल रहे हैं (उपयोग कर रहे हैं )।
संपादित करें: इसलिए लगभग 5 साल बाद, यह उत्तर नीचे हो रहा है क्योंकि यह "सामान्य" जेएस ऑब्जेक्ट शाब्दिक (उर्फ मानचित्र, उर्फ हैश, उर्फ शब्दकोश) नहीं बना रहा है।
यह है तथापि संरचना का निर्माण है कि ओपी के लिए कहा है (और जो से जुड़े अन्य सवाल में चित्रित किया गया है) है, जो है वस्तु शाब्दिक की एक सरणी , प्रत्येक के साथ key
और value
गुण। मुझसे यह न पूछें कि उस संरचना की आवश्यकता क्यों थी, लेकिन यह वही है जो पूछा गया था।
लेकिन, लेकिन, अगर आप एक सादे जेएस ऑब्जेक्ट में चाहते हैं - और संरचना नहीं जिसे ओपी ने पूछा है - टीसीएल का जवाब देखें , हालांकि ब्रैकेट नोटेशन थोड़ा बोझिल है यदि आपके पास बस सरल चाबियाँ हैं जो जेएस के नाम मान्य हैं। आप ऐसा कर सकते हैं:
// object literal with properties
var dict = {
key1: "value1",
key2: "value2"
// etc.
};
या ऑब्जेक्ट बनाने के बाद गुण सेट करने के लिए नियमित डॉट-नोटेशन का उपयोग करें:
// empty object literal with properties added afterward
var dict = {};
dict.key1 = "value1";
dict.key2 = "value2";
// etc.
आप करते ब्रैकेट अंकन चाहते हैं, तो आप कुंजी है कि ऐसे ही उन में रिक्त स्थान, विशेष वर्ण, या बातें हैं मिल गया है। उदाहरण के लिए:
var dict = {};
// this obviously won't work
dict.some invalid key (for multiple reasons) = "value1";
// but this will
dict["some invalid key (for multiple reasons)"] = "value1";
यदि आपकी कुंजियाँ गतिशील हैं, तो आप कोष्ठक संकेतन भी चाहते हैं:
dict[firstName + " " + lastName] = "some value";
ध्यान दें कि कुंजी (संपत्ति के नाम) हमेशा तार होते हैं, और गैर-स्ट्रिंग मान एक कुंजी के रूप में उपयोग किए जाने पर एक स्ट्रिंग के लिए मजबूर हो जाएंगे। जैसे कोई Date
वस्तु अपने स्ट्रिंग प्रतिनिधित्व में परिवर्तित हो जाती है:
dict[new Date] = "today's value";
console.log(dict);
// => {
// "Sat Nov 04 2016 16:15:31 GMT-0700 (PDT)": "today's value"
// }
ध्यान दें कि यह "बस काम" जरूरी नहीं है, क्योंकि कई वस्तुओं में एक स्ट्रिंग प्रतिनिधित्व होगा जैसे "[object Object]"
कि एक गैर-अद्वितीय कुंजी के लिए नहीं है। तो कुछ इस तरह से सावधान रहें:
var objA = { a: 23 },
objB = { b: 42 };
dict[objA] = "value for objA";
dict[objB] = "value for objB";
console.log(dict);
// => { "[object Object]": "value for objB" }
बावजूद objA
और objB
किया जा रहा है पूरी तरह से अलग और अद्वितीय तत्व, वे दोनों एक ही मूल स्ट्रिंग प्रतिनिधित्व: "[object Object]"
।
इस Date
तरह से व्यवहार नहीं करने का कारण यह है कि Date
प्रोटोटाइप में एक कस्टम toString
तरीका है जो डिफ़ॉल्ट स्ट्रिंग प्रतिनिधित्व को ओवरराइड करता है। और आप भी ऐसा ही कर सकते हैं:
// a simple constructor with a toString prototypal method
function Foo() {
this.myRandomNumber = Math.random() * 1000 | 0;
}
Foo.prototype.toString = function () {
return "Foo instance #" + this.myRandomNumber;
};
dict[new Foo] = "some value";
console.log(dict);
// => {
// "Foo instance #712": "some value"
// }
(ध्यान दें कि चूंकि ऊपर एक यादृच्छिक संख्या का उपयोग करता है , नाम टक्कर अभी भी बहुत आसानी से हो सकती है। यह सिर्फ एक कार्यान्वयन को चित्रित करने के लिए है toString
।)
इसलिए जब वस्तुओं को कुंजी के रूप में उपयोग करने की कोशिश करते हैं, तो जेएस ऑब्जेक्ट के स्वयं के toString
कार्यान्वयन का उपयोग करेगा , यदि कोई हो, या डिफ़ॉल्ट स्ट्रिंग प्रतिनिधित्व का उपयोग करें।