النوع Map (الخرائط) والنوع Set (الأطقم) في جافاسكربت
تعتبر جافاسكربت من أشهر لغات البرمجة المستخدمة في تطوير الويب، وواحدة من أبرز مزاياها هي قدرتها على التعامل مع الهياكل البيانية المختلفة، مثل الكائنات (Objects) والمصفوفات (Arrays). ولكن إلى جانب هذه الهياكل التقليدية، توفر جافاسكربت أيضًا نوعين آخرين من الهياكل البيانية الأكثر تقدمًا: النوع Map (الخرائط) والنوع Set (الأطقم). يتميز هذان النوعان بخصائص ووظائف مميزة تجعل استخدامهما في البرمجة أكثر مرونة وكفاءة في بعض الحالات مقارنة بالأنواع التقليدية.
أولاً: النوع Map (الخرائط)
النوع Map في جافاسكربت هو نوع من البيانات يُستخدم لتخزين أزواج من القيم المفتاحية (key-value pairs)، حيث يمكن أن يكون المفتاح أي نوع من أنواع البيانات، سواء كان نصًا، أو رقمًا، أو حتى كائنًا. على عكس الكائنات التقليدية (Objects) في جافاسكربت التي تقيد مفاتيحها بأن تكون من النوع String أو Symbol، فإن Map يسمح بتخزين أي نوع من البيانات كمفتاح.
خصائص النوع Map
-
الترتيب: يحتفظ النوع
Mapبالترتيب الذي يتم إضافة الأزواج فيه. أي أنه عندما نقوم بإضافة عناصر إلى الخريطة، فإن ترتيبهم يبقى كما هو عند الاسترجاع. -
الأنواع المتنوعة للمفاتيح: يمكن أن تحتوي المفاتيح في
Mapعلى أي نوع من أنواع البيانات، سواء كانت أرقامًا، نصوصًا، كائنات، أو حتى وظائف. -
الحجم (Size): يوفر
Mapخاصيةsizeالتي تسمح بمعرفة عدد الأزواج الموجودة في الخريطة. وهو ما يعد أكثر سلاسة مقارنة بالكائنات، التي يجب تحديد عدد المفاتيح فيها يدوياً. -
العمليات على الـ
Map:-
إضافة عناصر: يمكن إضافة عناصر باستخدام الدالة
set(key, value):javascriptlet map = new Map(); map.set('name', 'Ali'); map.set(1, 'First'); map.set(true, 'Boolean'); -
الحصول على قيمة: للوصول إلى قيمة معينة عبر المفتاح، نستخدم الدالة
get(key):javascriptconsole.log(map.get('name')); // "Ali" -
التحقق من وجود مفتاح: يمكن التحقق من وجود مفتاح معين في الخريطة باستخدام
has(key):javascriptconsole.log(map.has(1)); // true console.log(map.has('age')); // false -
حذف عنصر: يمكن حذف عنصر عبر المفتاح باستخدام
delete(key):javascriptmap.delete('name'); console.log(map.has('name')); // false -
مسح كافة العناصر: باستخدام
clear():javascriptmap.clear(); console.log(map.size); // 0
-
استخدامات النوع Map
-
تخزين أزواج من القيم المفتاحية: يستخدم
Mapفي حالات تحتاج فيها إلى تخزين بيانات مع مفاتيح مخصصة يمكن أن تكون من أي نوع. -
استرجاع البيانات بسرعة: عند العمل مع مجموعات كبيرة من البيانات حيث تحتاج إلى الوصول إلى قيمة معينة عبر مفتاح، يمكن لـ
Mapأن يوفر وقت وصول أسرع مقارنة بالكائنات التقليدية، خاصة عند التعامل مع مفاتيح غير نصية. -
الاحتفاظ بالترتيب: عندما تحتاج إلى الحفاظ على ترتيب العناصر، سواء عند إضافة أو عند استرجاع القيم، يكون
Mapالخيار المثالي.
ثانياً: النوع Set (الأطقم)
أما النوع Set في جافاسكربت فهو نوع آخر مميز لتخزين القيم الفريدة (Unique Values). بعبارة أخرى، يضمن Set عدم وجود قيم مكررة ضمن المجموعة. يعتبر Set مثاليًا في الحالات التي تحتاج فيها إلى تخزين مجموعة من القيم دون الحاجة إلى القلق بشأن التكرار.
خصائص النوع Set
-
القيم الفريدة: لا يمكن أن يحتوي
Setعلى قيم مكررة. إذا حاولت إضافة نفس القيمة أكثر من مرة، فلن يتم إضافتها مرة أخرى. -
الترتيب: كما هو الحال مع
Map، يحتفظSetأيضًا بالترتيب الذي تتم فيه إضافة العناصر. لذلك يمكن استرجاع القيم بنفس الترتيب الذي تمت إضافتها به. -
العمليات على الـ
Set:-
إضافة قيم: لإضافة قيمة إلى
Set، يمكن استخدامadd(value):javascriptlet set = new Set(); set.add(1); set.add(2); set.add(3); set.add(1); // لن تتم إضافة 1 مرة أخرى console.log(set); // Set {1, 2, 3} -
التحقق من وجود قيمة: باستخدام
has(value):javascriptconsole.log(set.has(2)); // true console.log(set.has(4)); // false -
حذف قيمة: باستخدام
delete(value):javascriptset.delete(2); console.log(set.has(2)); // false -
مسح كافة القيم: باستخدام
clear():javascriptset.clear(); console.log(set.size); // 0
-
استخدامات النوع Set
-
التأكد من القيم الفريدة: يستخدم
Setبشكل رئيسي لضمان عدم تكرار القيم في مجموعة معينة. على سبيل المثال، عند التعامل مع قائمة من العناصر التي يجب أن تكون فريدة مثل عناوين البريد الإلكتروني أو أسماء المستخدمين. -
العمليات على المجموعات: يوفر
Setطريقة مرنة للتعامل مع المجموعات، مثل دمج المجموعات أو إزالة القيم المكررة. -
التحقق من العضوية: عندما تحتاج إلى معرفة إذا كانت قيمة معينة موجودة في المجموعة أو لا.
الفرق بين Map و Set
رغم أن كلا من Map و Set يتعاملان مع المجموعات من حيث تخزين البيانات، إلا أنهما يختلفان في عدة جوانب رئيسية:
-
الهيكل:
-
Mapيُستخدم لتخزين أزواج من القيم المفتاحية (key-value pairs). -
Setيُستخدم لتخزين القيم الفريدة فقط.
-
-
التكرار:
-
في
Mapيمكن أن تحتوي كل قيمة على مفتاح فريد، بينما فيSetيمكن أن تحتوي فقط على قيم فريدة.
-
-
الوصول:
-
في
Mapيتم الوصول إلى القيم عبر المفاتيح، بينما فيSetيتم الوصول إلى القيم مباشرة.
-
-
التخزين:
-
يتيح
Mapتخزين البيانات في شكل أزواج (مفتاح-قيمة)، بينما يتيحSetتخزين القيم فقط دون الحاجة إلى مفتاح.
-
الحالات التي يمكن استخدام Map و Set فيها
-
عند التعامل مع بيانات غير مرتبة: في حالة كانت البيانات التي تتعامل معها تحتاج إلى ترتيب عند إضافة واسترجاع القيم، فإن
MapوSetيوفران حلاً مناسبًا. -
البيانات الفريدة: في حالة كانت الحاجة لتخزين بيانات فريدة فقط دون تكرار، مثل قائمة من القيم أو المعرفات، يكون
Setالخيار الأمثل. -
البيانات مع مفاتيح مخصصة: إذا كنت بحاجة إلى تخزين معلومات مرتبطة بمفاتيح مخصصة (مثل الكائنات أو الأرقام)، فإن
Mapيقدم لك مزايا كبيرة مقارنة بالكائنات التقليدية.
خاتمة
تعتبر الأنواع Map و Set في جافاسكربت أدوات قوية ومرنة توفر إمكانية العمل مع المجموعات والبيانات بكفاءة عالية. إذا كنت بحاجة إلى تخزين أزواج من القيم المفتاحية مع الحفاظ على الترتيب، فإن Map هو الحل الأمثل. أما إذا كنت بحاجة إلى تخزين قيم فريدة فقط، فإن Set هو الخيار الأفضل. يعتمد اختيارك بينهما على احتياجاتك الخاصة في التعامل مع البيانات والتكرار والترتيب.

