- نُشر في
مجموعة JavaScript: معلومات أساسية يجب على كل مبرمج مبتدئ معرفتها
- الكتاب
- الاسم
- Imamuzzaki Abu Salam
- https://x.com/ImBIOS_Dev
لماذا نستخدم المجموعة (Set)؟
إنها بنية بيانات تسمح لك بتخزين قيم فريدة من نوع بيانات أيٍّ كان. تشبه المصفوفة (array) ولكنّها لا تسمح بوجود قيم مكررة. إنها طريقة ممتازة لحفظ القيم الفريدة من أي نوع. أحيانًا قد ترغب في تخزين قيم فريدة في مصفوفة، ولكنك لا ترغب في البحث في جميع عناصر المصفوفة للتحقق مما إذا كانت القيمة موجودة بالفعل. هذا هو المكان الذي تكون فيه المجموعة مفيدة للغاية.
في مقالة سابقة، ناقشنا خريطة جافاسكريبت (Javascript Map). تشبه المجموعة خريطة، ولكنّها تخزّن فقط المفاتيح (keys)، وليس القيم (values). تُعدّ طريقة فعالة لحفظ قيم فريدة من نوع بيانات أيٍّ كان. إنّ استخدام الخريطة في العديد من الحالات يكون مُرهقاً. لهذا السبب، دعونا نتحدث عن المجموعة.
ما هي مجموعة جافاسكريبت (JavaScript Set)؟
تُعدّ كائنات المجموعة (Set objects) مجموعات من القيم. لا يمكن أن توجد قيمة في المجموعة سوى مرة واحدة؛ فهي فريدة في مجموعة المجموعة. يمكنك التكرار خلال عناصر المجموعة بترتيب الإدراج. يتوافق ترتيب الإدراج مع الترتيب الذي أدخلت فيه كل قطعة في المجموعة بواسطة طريقة add () بنجاح (أي لم يكن هناك عنصر متطابق موجود بالفعل في المجموعة عند استدعاء المجموعة لطريقة add ()).
تتطلب المواصفات أن يتم تنفيذ المجموعات "بحيث توفر، في المتوسط، أوقات وصول أبطأ من الخطية اعتمادًا على عدد العناصر في المجموعة." لذلك، يمكن تمثيلها داخليًا كجدول هاش (مع بحث O(1)) أو شجرة بحث (مع بحث O(log(N))) أو أي بنية بيانات أخرى، طالما أنّ تعقيدها أفضل من O(N).
كيفية إنشاء مجموعة؟
هناك طريقتان لإنشاء مجموعة. الطريقة الأولى هي استخدام مُنشئ المجموعة (Set constructor). الطريقة الثانية هي استخدام حرفية كائن المجموعة (Set object literal).
مُنشئ المجموعة
ينشئ مُنشئ المجموعة كائن مجموعة جديد. يمكنك تمرير كائن قابل للتكرار كحجة للمنشئ. سيتم إضافة عناصر الكائن القابل للتكرار إلى المجموعة الجديدة.
const set = new Set([1, 2, 3, 4, 5])
حرفية كائن المجموعة
تنشئ حرفية كائن المجموعة كائن مجموعة جديد. يمكنك تمرير كائن قابل للتكرار كحجة لحرفية الكائن. سيتم إضافة عناصر الكائن القابل للتكرار إلى المجموعة الجديدة.
const set = {1, 2, 3, 4, 5};
طرق وخصائص المجموعة
الطريقة | الوصف |
---|---|
add() | يضيف عنصرًا جديدًا بقيمة محددة إلى كائن المجموعة. |
clear() | يزيل جميع العناصر من كائن المجموعة. |
delete() | يزيل العنصر المرتبط بالقيمة ويعيد القيمة التي كان سيعيدها Set.prototype.has(value) مسبقًا. ستعيد Set.prototype.has(value) القيمة false بعد ذلك. |
entries() | يعيد كائن مُكرّر (Iterator object) جديد يحتوي على مجموعة من [القيمة، القيمة] لكل عنصر في كائن المجموعة، بترتيب الإدراج. |
forEach() | ينفذ دالة مُقدّمة مرة واحدة لكل قيمة في كائن المجموعة، بترتيب الإدراج. |
has() | يعيد قيمة منطقية تُشير إلى ما إذا كان عنصر موجودًا بقيمة مُحدّدة في كائن المجموعة. |
keys() | يعيد كائن مُكرّر (Iterator object) جديد يحتوي على قيم كل عنصر في كائن المجموعة بترتيب الإدراج. |
values() | يعيد كائن مُكرّر (Iterator object) جديد يحتوي على قيم كل عنصر في كائن المجموعة بترتيب الإدراج. |
الخاصية | الوصف |
---|---|
size | يعيد عدد القيم في كائن المجموعة. |
أمثلة على المجموعة
إضافة قيمة إلى المجموعة
const set = new Set([1, 2, 3, 4, 5])
set.add(6)
console.log(Set) // Set { 1, 2, 3, 4, 5, 6 }
حذف قيمة من المجموعة
const set = new Set([1, 2, 3, 4, 5])
set.delete(3)
console.log(set) // Set { 1, 2, 4, 5 }
التحقق مما إذا كانت قيمة موجودة في المجموعة
const set = new Set([1, 2, 3, 4, 5])
console.log(set.has(3)) // true
التكرار خلال المجموعة
const set = new Set([1, 2, 3, 4, 5])
for (const item of Set) {
console.log(item)
}
// 1
// 2
// 3
// 4
// 5
تحويل المجموعة إلى مصفوفة
const set = new Set([1, 2, 3, 4, 5])
const array = Array.from(set)
console.log(array) // [1, 2, 3, 4, 5]
تحويل مصفوفة إلى مجموعة
const Array = [1, 2, 3, 4, 5]
const set = new Set(array)
console.log(Set) // Set { 1, 2, 3, 4, 5 }
الحصول على حجم المجموعة
const set = new Set([1, 2, 3, 4, 5])
console.log(set.size) // 5
مسح المجموعة
const set = new Set([1, 2, 3, 4, 5])
set.clear()
console.log(set) // Set {}
دمج مجموعتين
const set1 = new Set([1, 2, 3, 4, 5])
const set2 = new Set([6, 7, 8, 9, 10])
const set3 = new Set([...set1, ...set2])
console.log(set3) // Set { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
الحصول على التقاطع بين مجموعتين
const set1 = new Set([1, 2, 3, 4, 5])
const set2 = new Set([4, 5, 6, 7, 8])
const set3 = new Set([...set1].filter((x) => set2.has(x)))
console.log(set3) // Set { 4, 5 }
الحصول على الفرق بين مجموعتين
const set1 = new Set([1, 2, 3, 4, 5])
const set2 = new Set([4, 5, 6, 7, 8])
const set3 = new Set([...set1].filter((x) => !set2.has(x)))
console.log(set3) // Set { 1, 2, 3 }
التحقق مما إذا كانت مجموعة هي مجموعة فرعية من مجموعة أخرى
const set1 = new Set([1, 2, 3, 4, 5])
const set2 = new Set([4, 5])
console.log([...set2].every((x) => set1.has(x))) // true
التحقق مما إذا كانت مجموعة هي مجموعة فوقية لمجموعة أخرى
const set1 = new Set([1, 2, 3, 4, 5])
const set2 = new Set([4, 5])
console.log([...set1].every((x) => set2.has(x))) // false
التحقق مما إذا كانت مجموعتان متباينتان
const set1 = new Set([1, 2, 3, 4, 5])
const set2 = new Set([6, 7, 8, 9, 10])
console.log([...set1].every((x) => !set2.has(x))) // true
التحقق مما إذا كانت مجموعتان متساويتان
const set1 = new Set([1, 2, 3, 4, 5])
const set2 = new Set([1, 2, 3, 4, 5])
console.log(set1.size === set2.size && [...set1].every((x) => set2.has(x))) // true
دعم المتصفح
![]() | ![]() | ![]() | ![]() | ![]() |
---|---|---|---|---|
49+ | 44+ | 12+ | 10.1+ | 36+ |
المجموعة مقابل المصفوفة
المجموعة | المصفوفة |
---|---|
قيمة فريدة، لا يسمح بالقيم المكررة | يسمح بالقيم المكررة |
المجموعة هي مجموعة من القيم ليس لها ترتيب معين | المصفوفة هي مجموعة من القيم لها ترتيب معين |
المجموعة قابلة للتكرار | المصفوفة قابلة للتكرار |
المجموعة أبطأ من المصفوفة في عملية البدء لأنها تستخدم عملية هاش. | المصفوفة أسرع من حيث عملية البدء |
الأداء أفضل عند التحقق من وجود عنصر | الأداء أفضل عند الوصول إلى عنصر |
نُشرت هذه المقالة في الأصل على blog.imam.dev.