متدهای نگاشت (Map Methods)
در «نگاشت (Map)» کلید و مقدار کنار هم می آیند. کلید می تواند هر نوعی باشد. همچنین، ترتیب ورود حفظ می شود. اینجا با مهم ترین «متد (Method)»های Map آشنا می شویم و سریع تمرین می کنیم.
ساخت اولیه با new Map()
می توانی آرایه ای از جفت ها بدهی. «سازنده (Constructor)» شیء جدید می سازد.
// Create a Map
const fruits = new Map([
["apples", 500],
["bananas", 300],
["oranges", 200]
]);
خواندن مقدار با get()
«get()» مقدارِ یک کلید را برمی گرداند. مثل خواندن نمره یک دانش آموز.
// Get a value
fruits.get("apples");
افزودن/تغییر با set()
«set()» کلید را می سازد یا مقدارش را به روزرسانی می کند.
// Create a Map
const fruits2 = new Map();
// Set Map Values
fruits2.set("apples", 500);
fruits2.set("bananas", 300);
fruits2.set("oranges", 200);
// Update existing value
fruits2.set("apples", 500);
اندازه Map با size
«size» فقط می خواند. تعداد جفت ها را می دهد. ویژگی است، متد نیست.
// Count entries
fruits.size;
حذف یک کلید با delete()
«delete()» یک ورودی را پاک می کند. اگر کلید باشد، true می دهد.
// Remove one entry
fruits.delete("apples");
پاکسازی کامل با clear()
«clear()» همه ورودی ها را حذف می کند. Map خالی می شود.
// Remove all entries
fruits.clear();
وجود کلید با has()
«has()» بررسی می کند کلید وجود دارد یا نه. خروجی یک «Boolean» است.
// Check a key
fruits.has("apples");
// After delete
fruits.delete("apples");
fruits.has("apples");
پیمایش با forEach()
«forEach()» روی هر جفت اجرا می شود. «callback» یک تابعِ فراخوانی است.
// List all entries
let text = "";
fruits.forEach(function(value, key) {
text += key + " = " + value;
});
گرفتن جفت ها با entries()
«entries()» یک «iterator» از [کلید، مقدار] می دهد. با «for...of» می چرخیم.
// List all entries
let text2 = "";
for (const x of fruits.entries()) {
text2 += x;
}
فقط کلیدها با keys()
«keys()» فقط کلیدها را می دهد. خروجی هم «iterator» است.
// List all keys
let onlyKeys = "";
for (const k of fruits.keys()) {
onlyKeys += k;
}
فقط مقادیر با values()
«values()» فقط مقدارها را می دهد. می توانی جمع بزنی.
// List all values
let onlyValues = "";
for (const v of fruits.values()) {
onlyValues += v;
}
// Sum all values
let total = 0;
for (const v of fruits.values()) {
total += v;
}
شیء به عنوان کلید
می توانی «Object» را کلید کنی. پس رشته "apples" با شیء apples فرق دارد.
// Create Objects
const apples = { name: "Apples" };
const bananas = { name: "Bananas" };
const oranges = { name: "Oranges" };
// Create a Map
const fruits3 = new Map();
// Add new Elements to the Map
fruits3.set(apples, 500);
fruits3.set(bananas, 300);
fruits3.set(oranges, 200);
// Key is an object, not a string
fruits3.get("apples");
گروه بندی با Map.groupBy() (ES2024)
«Map.groupBy()» عناصر را بر اساس «callback» گروه بندی می کند. شیء اصلی تغییر نمی کند.
// Create an Array
const fruitsArr = [
{ name: "apples", quantity: 300 },
{ name: "bananas", quantity: 500 },
{ name: "oranges", quantity: 200 },
{ name: "kiwi", quantity: 150 }
];
// Callback function to Group Elements
function myCallback({ quantity }) {
return quantity > 200 ? "ok" : "low";
}
// Group by Quantity
const result = Map.groupBy(fruitsArr, myCallback);
نکته: ویژگی های ES2024 ممکن است در مرورگرهای قدیمی کار نکنند. گاهی «Polyfill» لازم است.
گام های عملی پیشنهادی
- یک Map بساز و سه کلید اضافه کن.
- با get() یکی را بخوان و سپس با set() تغییر بده.
- با values() مجموع مقادیر را حساب کن.
- با delete() یکی را حذف کن و has() را تست کن.
جمع بندی سریع
- set و get پایه ای ترین متدها هستند.
- size فقط می خواند و عدد می دهد.
- forEach و entries برای پیمایش عالی اند.
- Object می تواند کلید باشد؛ رشته فرق دارد.
- groupBy برای خوشه بندی ایتم هاست.
ادامه مسیر: نگاشت ها (Maps) را مرور کن. سپس مرجع نگاشت و WeakMap را ببین تا یادگیری کامل شود.