مقدمه

گاهی در پروژه‌های واقعی نیاز دارید داده‌ها را به صورت جفت کلید-مقدار ذخیره کنید. Object برای این کار مناسب است اما محدودیت‌هایی دارد؛ مثلاً کلیدها فقط از نوع رشته یا Symbol هستند و ترتیب ورود رعایت نمی‌شود. نوع Map از ES6 به جاوااسکریپت اضافه شد تا کلیدهای هر نوعی (حتی شیء یا تابع) را پشتیبانی کند و قابلیت‌های بیشتری برای مدیریت داده‌های کلیدی ارائه دهد.

ساخت Map و افزودن داده

نوع Map در جاوااسکریپت برای نگهداری مجموعه‌ای از داده‌ها به صورت جفت کلید-مقدار طراحی شده است. این نوع داده‌ای به شما امکان می‌دهد تا داده‌ها را با کلیدهای یکتا ذخیره کنید و به راحتی به آن‌ها دسترسی داشته باشید.

ساخت Map

برای ساخت یک Map جدید کافی است سازنده Map را با عملگر new صدا بزنید. می‌توانید Map را خالی بسازید یا از ابتدا مقادیر اولیه بدهید:

Copy Icon JAVASCRIPT
let capitals = new Map();
capitals.set("Iran", "Tehran");
capitals.set("France", "Paris");

let numbers = new Map([
  ["one", 1],
  ["two", 2]
]);

متد set برای افزودن یا به‌روزرسانی جفت کلید-مقدار استفاده می‌شود و می‌توانید هر نوع داده‌ای را به عنوان کلید انتخاب کنید.

دسترسی و حذف مقادیر

برای دسترسی به مقدار با کلید خاص از get و برای حذف یک جفت کلید-مقدار از delete استفاده می‌شود. برای بررسی وجود کلید هم می‌توان از has استفاده کرد. مثال زیر را ببینید:

Copy Icon JAVASCRIPT
console.log(capitals.get("Iran")); // "Tehran"
capitals.delete("France");
console.log(capitals.has("France")); // false

متد clear برای حذف تمام عناصر Map کاربرد دارد.

Copy Icon JAVASCRIPT
capitals.clear();

پیمایش Map و ویژگی‌های خاص

Map علاوه بر امکانات افزودن و حذف، متدهای مفیدی برای پیمایش داده‌ها دارد. این ویژگی‌ها باعث می‌شود کار با Map بسیار راحت‌تر از Object باشد، به خصوص زمانی که با داده‌های کلیدی زیادی سر و کار دارید.

پیمایش Map با for...of و متدها

می‌توانید با حلقه for...of روی Map پیمایش کنید. هر بار یک آرایه دوتایی (کلید، مقدار) باز می‌گردد. همچنین متدهای keys، values و entries برای پیمایش اختصاصی وجود دارند.

Copy Icon JAVASCRIPT
for (let [country, capital] of capitals) {
  console.log(country, capital);
}
for (let key of capitals.keys()) {
  console.log(key);
}

پراپرتی size برای دریافت تعداد عناصر Map استفاده می‌شود. این پراپرتی به شما امکان می‌دهد به راحتی تعداد کلید-مقدارهای موجود را بررسی کنید.

Copy Icon JAVASCRIPT
console.log(capitals.size); // 1

تفاوت Map و Object

اگرچه هم Map و هم Object داده‌ها را به صورت کلید-مقدار نگهداری می‌کنند، اما تفاوت‌های مهمی دارند. در Map هر نوع داده‌ای (حتی اشیاء و توابع) می‌تواند کلید باشد و ترتیب ورود عناصر حفظ می‌شود. همچنین Map متدهای تخصصی و بهینه‌ای برای جستجو و پیمایش داده‌ها دارد و کار با داده‌های حجیم را سریع‌تر و آسان‌تر می‌کند.

در جاوااسکریپت مدرن، برای ذخیره کلید-مقدارهای زیاد یا کلیدهای غیر رشته‌ای، همیشه از Map استفاده کنید و Object را فقط برای ساختارهای داده‌ای معمولی و پراپرتی‌محور به‌کار ببرید.

در درس بعد، با نوع Set برای نگهداری مجموعه‌ای از داده‌های یکتا آشنا خواهید شد.