Map و Set
Map نوشیدنی را زیر نام مهمان نگه میدارد. Set اضافهها را نگه میدارد و هر اضافه را یک بار. اینجا اول نوشیدنی 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 هستند. 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]" تبدیل میکند و نوشتن دوم، اولی را پاک میکند. نقشه این کار را نمیکند.
مجموعه نسخهٔ تکراری را دور میریزد
دو بار 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 را عوض میکند، مجموعه را از سه کلمه میسازد، و مهمان و نوشیدنی و اندازه را مینویسد.
<!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 است. set اول که tea بود دیده نمیشود، چون set دوم جایش را گرفته. mint تکراری اندازه را بالا نمیبرد. 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 دوم روی همان کلید مهمان تازه نیست؛ بهروزرسانی است. add دوم برای همان اضافه نادیده گرفته میشود.
- خواندن نقشه با
orders["lida"] - یکی گرفتن دو شیء شبیه هم
- انتظار اینکه
hasخود نوشیدنی را برگرداند - فراموش کردن اینکه
new Setاز اول کپی را حذف میکند - خواندن خط بهشکل ReferenceError
اینها را نگه دار
setروی کلید موجود مقدار را عوض میکند وsizeهمان میماند- کلید شیء با خود شیء مقایسه میشود، نه با فیلدهایش
- مجموعه هر مقدار را یک بار نگه میدارد
deleteیک عضو را برمیدارد و بعدhasبرابر false است- خط صفحه lida / mint / 2 است
🧠 دانش خود را بیازمایید
دانش خود را بیازمایید
خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کردهاید
📝 دستورالعملها
- هر سوال را با دقت بخوانید
- بهترین پاسخ را برای هر سوال انتخاب کنید
- میتوانید آزمون را هر چند بار که میخواهید تکرار کنید
- پیشرفت شما در بالا نمایش داده میشود