Map
هو كائن (object) خاص يسمح لك بتخزين أزواج مفتاح-قيمة (key-value pairs)، زي الـ Object لكن مع ميزات إضافية:
- يمكن أن تكون المفاتيح من أي نوع (أرقام، كائنات، دوال، …)، مش بس نصوص أو رموز مثل الـ Object.
- يحفظ ترتيب الإضافة، يعني لما تتكرر عليه، القيم ترجع بنفس ترتيب الإضافة.
- له خصائص ودوال مخصصة لتسهيل التعامل مع البيانات.
🚫 الفرق بين Map و Object
خاصية | Map | Object |
---|---|---|
نوع المفاتيح | أي نوع (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 |
---|---|---|
مفاتيح ليست نصوصًا فقط | ✅ | ❌ |
ترتيب المفاتيح مهم | ✅ | ❌ (غير مضمون) |
تحتاج معرفة الحجم بسرعة | ✅ | ❌ (تحتاج حساب يدوي) |
بنية بيانات بسيطة | ❌ | ✅ |
تريد تكرار سهل وواضح | ✅ | ❌ |