Map और Set
Map में हर मेहमान के नीचे एक पेय रहता है। Set extras रखता है और हर extra एक ही बार। lida पहले tea है, फिर उसकी जगह mint आ जाता है। सेट में mint और lemon जाते हैं। पेज की पंक्ति है lida / mint / 2।
सख्त मोड वाला पेज अलग था
वहाँ ReferenceError आया था, क्योंकि नाम घोषित नहीं था। इस पेज पर कुछ नहीं फेंका जाता। जो कुंजी नहीं है, उस पर get का परिणाम undefined होता है।
वही कुंजी, नया पेय
orders.set("lida", "tea") पहला पेय रख देता है। orders.set("lida", "mint") दूसरी पंक्ति नहीं जोड़ता; उसी कुंजी का मान बदल जाता है। size कुंजियाँ गिनता है, set को जितनी बार बुलाया गया उतनी बार नहीं।
const orders = new Map();
orders.set("lida", "tea");
orders.set("lida", "mint");
console.log(orders.get("lida"));
console.log(orders.size);
लॉग में पहले mint आता है, फिर 1। nima कभी रखा नहीं गया, इसलिए orders.get("nima") undefined है। orders.has("lida") true है। मैप get से पढ़ो। orders.lida और orders["lida"] साधारण ऑब्जेक्ट की लिखावट हैं; यह मैप उनसे नहीं पढ़ा जाता।
कुंजी वही ऑब्जेक्ट है
मैप की कुंजी एक ऑब्जेक्ट हो सकती है। रखा जाता है वही ऑब्जेक्ट, उसके फ़ील्ड से बनी कोई स्ट्रिंग नहीं। समान फ़ील्ड वाला दूसरा ऑब्जेक्ट दूसरी कुंजी है।
const cup = { guest: "lida" };
const other = { guest: "lida" };
const orders = new Map();
orders.set(cup, "tea");
console.log(orders.get(cup));
console.log(orders.get(other));
console.log(orders.size);
लॉग में tea, फिर undefined, फिर 1। साधारण ऑब्जेक्ट दोनों कुंजियों को "[object Object]" स्ट्रिंग बना देता, और दूसरी लिखत पहली को मिटा देती। मैप ऐसा नहीं करता।
दूसरी mint नहीं जुड़ती
add("mint") दो बार भी एक ही mint छोड़ता है। lemon दूसरा मान है, इसलिए size 2 है। has हाँ या ना बताता है। मान वापस नहीं देता।
const extras = new Set();
extras.add("mint");
extras.add("mint");
extras.add("lemon");
console.log(extras.size);
console.log(extras.has("lemon"));
लॉग में 2 आता है, फिर true। new Set(["mint", "mint", "lemon"]) वही सेट है: mint की प्रति पहले ही गिर चुकी है। सेट में केवल मान होते हैं। किसी मेहमान के नीचे पेय नहीं रखा जाता।
delete एक प्रविष्टि हटाता है
कुछ हटा हो तो delete true देता है। मान न हो तो false आता है और सेट वैसा ही रहता है।
const extras = new Set(["mint", "lemon"]);
console.log(extras.delete("lemon"));
console.log(extras.size);
console.log(extras.has("lemon"));
लॉग: true, फिर 1, फिर false। mint अब भी अंदर है। मैप पर भी delete और has होते हैं, पर वे कुंजी से चलते हैं: orders.delete("lida") उस मेहमान को हटाता है।
पेज जो पंक्ति लिखता है
lida का पेय बदला जाता है, सेट तीन शब्दों से बनता है, और मेहमान, पेय तथा size लिखे जाते हैं।
<!DOCTYPE html>
<html>
<body>
<p id="line">…</p>
<script>
const orders = new Map();
orders.set("lida", "tea");
orders.set("lida", "mint");
const extras = new Set(["mint", "mint", "lemon"]);
const line = document.querySelector("#line");
line.textContent = "lida / " + orders.get("lida") + " / " + extras.size;
</script>
</body>
</html>
पंक्ति पढ़ी जाती है lida / mint / 2। tea वाला पहला set दिखाई नहीं देता। दोहराई mint size नहीं बढ़ाती। ReferenceError सख्त मोड वाली पंक्ति थी।
काउंटर पर पाँच कदम
- lida को tea रखो, फिर mint। get("lida") mint है और size 1 है।
- tea को cup के नीचे रखो। get(other) undefined है और size 1 रहता है।
- mint, फिर mint, फिर lemon जोड़ो। size 2 है और has("lemon") true है।
- lemon हटाओ। size 1 है और has("lemon") false है।
- पेज पढ़ो। पंक्ति lida / mint / 2 है।
चूक, और जो याद रखना है
उसी कुंजी पर दूसरा set अद्यतन है। उसी extra का दूसरा add छोड़ दिया जाता है।
- मैप को orders["lida"] से मत पढ़ो
- दो मिलते-जुलते ऑब्जेक्ट एक कुंजी नहीं हैं
- has पेय नहीं लौटाता
- new Set प्रतियाँ पहले ही गिरा देता है
- पंक्ति को ReferenceError मत पढ़ो
याद रहे
- set बदलता है और size वही रहता है
- ऑब्जेक्ट कुंजियाँ स्वयं वे ऑब्जेक्ट हैं
- सेट हर मान एक बार रखता है
- delete एक प्रविष्टि हटाता है
- पेज की पंक्ति lida / mint / 2 है
🧠 अपने ज्ञान की परीक्षा करें
अपने ज्ञान की परीक्षा करें
इस इंटरैक्टिव क्विज़ के साथ अपनी चुनौती लें और देखें कि आप विषय को कितनी अच्छी तरह समझते हैं
📝 निर्देश
- हर प्रश्न को ध्यान से पढ़ें
- हर प्रश्न के लिए सबसे अच्छा उत्तर चुनें
- आप जितनी बार चाहें क्विज़ दोबारा दे सकते हैं
- आपकी प्रगति शीर्ष पर दिखाई जाएगी