Map In javaScript

Map هو كائن (object) خاص يسمح لك بتخزين أزواج مفتاح-قيمة (key-value pairs)، زي الـ Object لكن مع ميزات إضافية:

  • يمكن أن تكون المفاتيح من أي نوع (أرقام، كائنات، دوال، …)، مش بس نصوص أو رموز مثل الـ Object.
  • يحفظ ترتيب الإضافة، يعني لما تتكرر عليه، القيم ترجع بنفس ترتيب الإضافة.
  • له خصائص ودوال مخصصة لتسهيل التعامل مع البيانات.
🚫 الفرق بين Map و Object
خاصيةMapObject
نوع المفاتيحأي نوع (object، function، أي شيء)نصوص أو رموز فقط
ترتيب التكراريحفظ ترتيب الإضافةغير مضمون (في بعض الحالات)
طريقة التكراريدعم التكرار مباشرةيحتاج لـ Object.keys أو for...in
الحجميمكن الحصول عليه بـ .sizeلا توجد خاصية مباشرة
أداء إضافة/حذفأسرع في كثير من الحالاتأبطأ قليلاً

📌 كيفية إنشاء Map

const map = new Map();
JavaScript

🔑 إضافة عناصر (key-value pairs)

map.set('name', 'Ali');
map.set(123, 'a number key');
map.set({ id: 1 }, 'object key');
JavaScript

👀 قراءة القيم

console.log(map.get('name'));    // 'Ali'
console.log(map.get(123));       // 'a number key'
JavaScript

🔄 التحقق من وجود مفتاح

console.log(map.has('name'));    // true
console.log(map.has('age'));     // false
JavaScript

❌ حذف عنصر

map.delete('name');
console.log(map.has('name'));    // false
JavaScript

🔄 التكرار على Map

map.forEach((value, key) => {
  console.log(key, value);
});
JavaScript

أو باستخدام for...of مع destructuring:

for (const [key, value] of map) {
  console.log(key, value);
}
JavaScript

📏 معرفة حجم الـ Map

console.log(map.size);  // عدد العناصر داخل الـ Map
JavaScript

مثال كامل:

const map = new Map();

map.set('name', 'Ali');
map.set(1, 'one');
map.set({ id: 1 }, 'an object key');

console.log(map.get('name'));  // Ali
console.log(map.size);          // 3

map.forEach((value, key) => {
  console.log(key, value);
});
JavaScript

🕒 متى تستخدم Map؟

1. تحتاج مفاتيح من أي نوع (ليست فقط نصوص أو رموز)
  • في Object، المفاتيح تتحول دائمًا إلى نصوص.
  • في Map، يمكنك استخدام أشياء مثل كائنات (Objects)، دوال (Functions)، أو حتى قيم أخرى كمفاتيح.

2. تريد الحفاظ على ترتيب الإدخال
  • Map يحتفظ بترتيب الأزواج التي أُضيفت (key-value pairs).
  • التكرار على Map سيكون بنفس ترتيب الإضافة.
  • في Object، الترتيب غير مضمون أو معقد قليلاً (خصوصًا مع مفاتيح الأعداد).

3. تحتاج إلى أداء أفضل مع الكثير من الإضافات والحذف
  • Map غالبًا أسرع في عمليات الإضافة، الحذف، والبحث، خصوصًا عندما تكون هناك بيانات كثيرة.
4. تريد معرفة حجم المجموعة بسهولة
  • Map توفر خاصية .size مباشرة.
  • في Object، يجب حساب عدد المفاتيح باستخدام Object.keys(obj).length.
5. عندما تحتاج للتكرار المباشر على الأزواج
  • Map قابل للتكرار مباشرة عبر for...of أو forEach.
  • Object يحتاج خطوات إضافية للتحويل إلى مصفوفات المفاتيح أو القيم.

❌ متى تستخدم Object بدلًا من Map؟
  • إذا كنت تحتاج كائنًا بسيطًا لتخزين بيانات معروفة ومفتاحية نصية فقط.
  • إذا كنت تريد دعم أوسع في البيئات القديمة (مع أن معظم البيئات الحديثة تدعم Map).
  • عندما تريد بنية بيانات تقليدية دون تعقيد.

ملخص:

الحالةاستخدم Mapاستخدم Object
مفاتيح ليست نصوصًا فقط
ترتيب المفاتيح مهم❌ (غير مضمون)
تحتاج معرفة الحجم بسرعة❌ (تحتاج حساب يدوي)
بنية بيانات بسيطة
تريد تكرار سهل وواضح