JavaScript Map ऑब्जेक्ट
Map की-वैल्यू पेयर्स का कलेक्शन है जो इंसर्शन ऑर्डर याद रखता है और किसी भी टाइप की कीज़ अनुमति देता है (ऑब्जेक्ट्स के विपरीत जो केवल स्ट्रिंग/सिम्बल कीज़ सपोर्ट करते हैं)।
सिंटैक्स
new Map([iterable])
समस्या: प्लेन ऑब्जेक्ट्स की सीमा
ऑब्जेक्ट्स में ऑब्जेक्ट कीज़ toString() होकर "[object Object]" बन जाते हैं।
<script>
var obj = {};
var keyA = {};
var keyB = {num: 3};
obj[keyA] = "a";
obj[keyB] = "b";
console.log(obj); // {"[object Object]": "b"} - keyA ओवरराइट हो गया!
</script>
आउटपुट
{"[object Object]":"b"}
समाधान: Map उपयोग करें
<html> <body> <script>
var keyA = {};
var keyB = {num: 3};
var map = new Map();
map.set(keyA, "a");
map.set(keyB, "b");
// इटरेशन
for (let [key, value] of map.entries()) {
document.write(JSON.stringify(key) + value + " ");
}
</script> </body> </html>
आउटपुट
{}a {"num":3}b
Map के मुख्य मेथड्स
| मेथड | विवरण |
|---|---|
set(key, value) | की-वैल्यू सेट करता है, चेनिंग के लिए map लौटाता है |
get(key) | की से वैल्यू प्राप्त करता है |
has(key) | की मौजूद है? (बूलियन) |
delete(key) | की डिलीट करता है (बूलियन) |
clear() | सभी एलिमेंट्स हटाता है |
size | एलिमेंट्स की संख्या (प्रॉपर्टी) |
keys() | कीज़ इटरेटर |
values() | वैल्यूज इटरेटर |
entries() | [key, value] इटरेटर |
forEach() | प्रत्येक पेयर पर कॉलबैक |
Map vs Object
| विशेषता | Map | Object |
|---|---|---|
| की टाइप्स | कोई भी (ऑब्जेक्ट, फंक्शन, प्रिमिटिव) | स्ट्रिंग/सिम्बल केवल |
| ऑर्डर | इंसर्शन ऑर्डर गारंटीड | ES2015+ में गारंटीड लेकिन ऐतिहासिक नहीं |
| साइज | .size प्रॉपर्टी | मैन्युअल गिनती |
| इटरेशन | सीधे इटरेबल | Object.keys() आदि चाहिए |
| डिफ़ॉल्ट कीज़ | कोई नहीं | प्रोटोटाइप से इनहेरिटेड |
| परफॉरमेंस | बार-बार एड/डिलीट में तेज़ | स्थैतिक डेटा के लिए तेज़ |