The Code Fix

🟨 شرح جافاسكريبت

Sets و Maps

لماذا Set و Map؟

المصفوفات والكائنات تكفي لأغلب الحالات، لكن Set وMap يحلّان مشكلتين شائعتين بأناقة: القيم الفريدة والخرائط بمفاتيح من أي نوع.

المجموعة (Set) — قيم فريدة

Set مجموعة قيم لا تتكرّر:

let set = new Set([1, 2, 2, 3, 3, 3]);
console.log(set);        // Set {1, 2, 3}  (حُذف المكرّر تلقائيًا)

set.add(4);
set.has(2)               // true
set.delete(1);
set.size                 // العدد

تطبيق شائع: إزالة التكرار من مصفوفة 🌟

let numbers = [1, 2, 2, 3, 3];
let unique = [...new Set(numbers)];   // [1, 2, 3]

المرور على Set

for (let value of set) {
  console.log(value);
}

الخريطة (Map) — مفاتيح من أي نوع

Map مثل الكائن، لكن مفاتيحه يمكن أن تكون أي نوع (لا نصوصًا فقط)، وتحافظ على ترتيب الإدخال:

let map = new Map();

map.set("name", "براء");
map.set(1, "رقم كمفتاح");
map.set(true, "منطقي كمفتاح");

map.get("name")   // "براء"
map.has(1)        // true
map.delete(true);
map.size          // العدد

المرور على Map

for (let [key, value] of map) {
  console.log(key, "=", value);
}

Map مقابل Object — متى أيهما؟

ObjectMap
المفاتيحنصوص/رموز فقطأي نوع
الترتيبغير مضمونمحفوظ
الحجميدويًا.size
الأنسب لـبيانات ثابتة البنيةبيانات ديناميكية المفاتيح

الأخطاء الشائعة

  • ❌ استخدام set[0] للوصول → Set/Map لا تُفهرَس؛ استخدم has/get والمرور.
  • ❌ نسيان [...new Set(arr)] لإزالة التكرار → أسهل طريقة.
  • ❌ استخدام .length بدل .size.

خلاصة

Set لتخزين قيم فريدة (رائع لإزالة التكرار: [...new Set(arr)])، وMap لخرائط مفاتيح من أي نوع مع ترتيب محفوظ. أدوات أنيقة تكمّل المصفوفات والكائنات.