لماذا 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 — متى أيهما؟
| Object | Map | |
|---|---|---|
| المفاتيح | نصوص/رموز فقط | أي نوع |
| الترتيب | غير مضمون | محفوظ |
| الحجم | يدويًا | .size |
| الأنسب لـ | بيانات ثابتة البنية | بيانات ديناميكية المفاتيح |
الأخطاء الشائعة
- ❌ استخدام
set[0]للوصول →Set/Mapلا تُفهرَس؛ استخدمhas/getوالمرور. - ❌ نسيان
[...new Set(arr)]لإزالة التكرار → أسهل طريقة. - ❌ استخدام
.lengthبدل.size.
خلاصة
Set لتخزين قيم فريدة (رائع لإزالة التكرار: [...new Set(arr)])، وMap لخرائط مفاتيح من أي نوع مع ترتيب محفوظ. أدوات أنيقة تكمّل المصفوفات والكائنات.