MDN डॉक्स के अनुसार,
Map ऑब्जेक्ट की-वैल्यू पेयर्स रखता है और कीज के मूल इंसर्शन ऑर्डर को याद रखता है। कोई भी मान (ऑब्जेक्ट्स और प्रिमिटिव दोनों) का उपयोग की या वैल्यू के रूप में किया जा सकता है।
यहां ध्यान देने वाली महत्वपूर्ण बात यह है कि ऑब्जेक्ट्स को भी मैप्स में कीज के रूप में उपयोग किया जा सकता है। यह जावास्क्रिप्ट ऑब्जेक्ट्स के साथ संभव नहीं है। JS ऑब्जेक्ट्स केवल प्रिमिटिव्स को कीज के रूप में अनुमति देते हैं।
एक और फीचर जो इसे कुछ परिदृश्यों में उपयोगी बनाता है वह यह है कि यह इटरेबल है। और यह इंसर्शन ऑर्डर में इटरेबल है। इसलिए जिन मामलों में आपको कीज के ऑर्डर को बनाए रखने के साथ-साथ उससे जुड़ा वैल्यू भी चाहिए, वहां मैप का उपयोग किया जा सकता है।
उदाहरण
const myMap = new Map();
const keyString = 'a string';
const keyObj = {};
const keyFunc = function() {};
// सभी प्रकार की कीज के साथ वैल्यू सेट करना
myMap.set(keyString, "String Val");
myMap.set(keyObj, 'Object val');
myMap.set(keyFunc, 'function val');
console.log(myMap.size); // 3
console.log(myMap.get(keyString)); // "String Val"
// इटरेबल - इंसर्शन ऑर्डर में
for (const [key, value] of myMap) {
console.log(key, value);
}
आउटपुट
3
String Val
Map vs Object - तुलना तालिका
| फीचर | Map | Object |
|---|---|---|
| की टाइप्स | कोई भी (ऑब्जेक्ट्स, फंक्शन्स, प्रिमिटिव्स) | केवल स्ट्रिंग्स/सिम्बल्स |
| ऑर्डर | इंसर्शन ऑर्डर गारंटीड | ES2015+ में गारंटीड (अधिकांशतः) |
| आकार | .size प्रॉपर्टी |
Object.keys(obj).length |
| इटरेबल | सीधे इटरेबल | Object.entries() की आवश्यकता |
| डिफॉल्ट कीज | कोई नहीं | प्रोटोटाइप से इनहेरिटेड |
| प्रदर्शन | फ्रीक्वेंट एड/डिलीट के लिए बेहतर | स्टेटिक डेटा के लिए बेहतर |
कब उपयोग करें
- Map: फ्रीक्वेंट एड/रिमूव, ऑब्जेक्ट कीज, ऑर्डर महत्वपूर्ण, अज्ञात कीज
- Object: स्टेटिक स्ट्रक्चर, JSON सीरियलाइज़ेशन, सिंपल की-वैल्यू