انتقل إلى محتوى الدرس
الدرس 100
تاريخ النشر: تاريخ التحديث:
دورة جافا سكريبت

بنية الخرائط المفتاحية Map في JavaScriptJavaScript Maps طريقة إنشاء Map وإدراج الأزواج، والخريطة المفتاحية Map ومميزاتها، والقراءة والفحص والحذف بالخريطة

أتقن بنية الخرائط المفتاحية Map في JavaScript لبناء قواميس مرتبة بالدوال set وget وhas وsize واستخدام الكائنات والأرقام كمفاتيح حقيقية والتكرار عليها بصيغة التفكيك.
أقسام الدرس
5
الأمثلة
2
اللغة
العربية
المشاهدات
4,732
محتوى الدرس
في هذا الدرس 5تصفّح المواضيع

بينما تناسب الكائنات التقليدية تمثيل السجلات ذات الحقول النصية الثابتة، قدّم إصدار ES6 بنية Map بوصفها قاموساً متخصصاً عالي الأداء لأزواج المفتاح والقيمة. فبخلاف الكائن العادي الذي يحول المفاتيح قسراً إلى نصوص ويرث أسماء دوال جاهزة مثل toString، تحتفظ Map بالنوع الحقيقي لكل مفتاح وترتيب إدخاله وتوفر عدد الأزواج مباشرةً عبر map.size.

مخطط بنية الخريطة المفتاحية Map: دعم جميع أنواع المفاتيح وترتيب الإدخال والعزل الآمن وخاصية size

تُنشأ الخريطة فارغة عبر new Map() أو بتمرير مصفوفة ثنائية من الأزواج [key, value]، وتُضاف العناصر حصراً بالدالة map.set(key, value) التي تقبل التسلسل؛ أما الكتابة الخاطئة بالأقواس map[key] = value فتتجاهل مخزن الخريطة الداخلي وتبقى map.size صفراً!

JavaScript
const prices = new Map([
  ['HTML', 29],
  ['CSS', 35],
]);
prices.set('JS', 49).set('HTML', 25);
document.getElementById('map-set').textContent =
  `Courses: ${prices.size} | HTML now: $${prices.get('HTML')}`;

توفر Map واجهة دوال متكاملة للقراءة عبر get(key) والفحص عبر has(key) والحذف عبر delete(key) أو clear()، وتتضح أفضليتها في المقارنة التالية:

المعيارالخريطة Mapالكائن التقليدي {}
أنواع المفاتيح المدعومةأي قيمة (كائنات، عناصر DOM، أرقام، نصوص)النصوص والرموز Symbols فقط
تصادم المفاتيح الموروثةلا يوجد؛ فضاء مفاتيح معزول ونقي تماماًيرث أسماء دوال جاهزة مثل toString
معرفة عدد العناصرمباشرة عبر خاصية map.sizeيتطلب استدعاء Object.keys(obj).length
كثرة الإضافة والحذفمصممة ومُحسّنة للتعديل المتكرر السريعإعادة تشكيل داخلية أبطأ مع الحذف المتكرر

في الكائن العادي يؤدي استخدام كائنين مختلفين كمفاتيح إلى تحويل كليهما للنص الواحد "[object Object]" فيمسح الثاني الأول! أما في Map فيعمل كل كائن أو عنصر DOM كمفتاح مرجعي مستقل، مما يسهّل ربط حالة الواجهة أو عدادات النقرات بعناصر الصفحة دون تلويث خصائصها.

يتيح المرور المباشر على الخريطة عبر for (const [key, value] of map) استخراج المفتاح والقيمة معاً بترتيب الإدخال بفضل صيغة التفكيك. كما يمكنك المرور على المفاتيح وحدها عبر map.keys() أو القيم وحدها عبر map.values() أو الدالة map.forEach((value, key) => ...).

JavaScript
const stock = new Map([
  ['Keyboard', 12],
  ['Monitor', 5],
  ['Headset', 19],
]);
const summary = [];
for (const [item, qty] of stock) {
  summary.push(`${item}: ${qty}`);
}
document.getElementById('map-loop').textContent =
  summary.join(' | ');
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

أتقنت في هذا الدرس بناء وتحديث القواميس المفتاحية Map بالدالة set()، والقراءة والفحص عبر get() وhas() وsize، واستخدام الأرقام والكائنات كمفاتيح حقيقية دون تحويل قسري، والتكرار بالتفكيك عبر for...of. الخطوة التالية: انتقل إلى درس «الوحدات البرمجية Modules» لتنظيم المشاريع متعددة الملفات في وحدات معزولة نظيفة.

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 Map الخريطة المفتاحية Map
بنية قاموس مرتبة في ES6 تربط المفاتيح بالقيم وتقبل أي نوع بيانات للمفاتيح بمعزل عن الخصائص الموروثة.
للمراجعة
02 map.set(key, value) دالة الإدراج والتحديث map.set
تضيف زوج مفتاح وقيمة أو تحدث قيمته إن وُجد مسبقاً وترجع الخريطة نفسها لدعم التسلسل.
للمراجعة
03 map.get(key) دالة الاسترجاع map.get
ترجع القيمة المرتبطة بالمفتاح المطابق تماماً، أو القيمة undefined عند عدم وجوده.
للمراجعة
04 Reference Key المفتاح المرجعي الكائني
استخدام كائن أو عنصر DOM مباشرةً كمفتاح في Map تتم مطابقته بهوية عنوانه في الذاكرة دون تحويله لنص.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات2

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 2 مفهومةأول بطاقة، أول خطوة
01 DOM DOM
Document Object Model
عناصر شجرة المستند التي يمكن استخدامها مباشرةً كمفاتيح حقيقية داخل خريطة Map.
للمراجعة
02 API API
Application Programming Interface
واجهة الدوال القياسية الموحدة لإدارة الإدراج والفحص والحذف في مجموعات اللغة الحديثة.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. افحص التبويبين الأول والثاني في محاكي Map لملاحظة التمييز الدقيق بين المفاتيح الرقمية والكائنية.

  2. افتح محرر تجربة حلقة Map وأضف عنصراً جديداً بالدالة set ثم تحقق من ظهوره في نهاية الترتيب.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

10أسئلة 2أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي10 أسئلة تنتظرك
01

ما الدالة الصحيحة لإدراج زوج مفتاح وقيمة داخل كائن Map؟

02

في بنية Map يُعامل الرقم 200 والنص "200" كمفتاحين منفصلين تماماً.

03

ماذا يحدث عند استدعاء map.set("plan", "Pro") على خريطة تحتوي مسبقاً المفتاح "plan"؟

04

لماذا يرجع الاستدعاء m.get({ id: 1 }) القيمة undefined عند تمرير كائن حرفي جديد؟

05

تبدأ الخريطة الجديدة new Map() خالية تماماً وترجع الدالة has("toString") القيمة false.

06

ما ترتيب أول معاملين في الدالة الممررة إلى map.forEach(callback)؟

07

ما الدالة التي تمسح جميع أزواج الخريطة دفعةً واحدة ليصبح حجمها صفراً؟

08

كتابة myMap["role"] = "admin" تضيف الزوج رسمياً للخريطة وتزيد myMap.size بمقدار 1.

09

أي صياغة حلقة تفكك المفتاح والقيمة معاً من الخريطة بترتيب إدخالهما؟

10

ماذا ترجع الدالة myMap.get("unknownKey") عند البحث عن مفتاح غير موجود بالخريطة؟