المجموعات الجزئية والمجموعات الفائقة
جزء من قسم Logic & Flow في رحلة JavaScript على Coddy — الدرس 40 من 65.
تُعد المجموعة A مجموعة جزئية من المجموعة B إذا كان كل عنصر في A هو أيضاً عنصر في B. وبالمقابل، تُعد B مجموعة شاملة لـ A إذا كانت تحتوي على جميع عناصر A.
تكون المجموعتان متساويتين إذا كانتا تحتويان على نفس العناصر تماماً. على سبيل المثال، لنقم بإنشاء بعض الاختبارات:
const setA = new Set([1, 2, 3]);
const setB = new Set([1, 2, 3, 4, 5]);
const setC = new Set([1, 2, 3]);
const setD = new Set([6, 7, 8]);دالة للتحقق مما إذا كانت setA هي مجموعة جزئية من setB:
function isSubset(setA, setB) {
return [...setA].every(element => setB.has(element));
}دالة للتحقق مما إذا كانت setA مجموعة شاملة لـ setB:
function isSuperset(setA, setB) {
return isSubset(setB, setA);
}دالة للتحقق مما إذا كانت مجموعتان متساويتين:
function areEqual(setA, setB) {
return setA.size === setB.size && isSubset(setA, setB);
}اختبار علاقة المجموعة الجزئية:
// هل A مجموعة جزئية من B؟
isSubset(setA, setB) // صحيح
// هل B مجموعة جزئية من A؟
isSubset(setB, setA) // خطأ
// هل D مجموعة جزئية من B؟
isSubset(setD, setB) // خطأاختبار علاقة المجموعة الفوقية:
// هل B مجموعة شاملة لـ A؟
isSuperset(setB, setA) // true
// هل A مجموعة شاملة لـ B؟
isSuperset(setA, setB) // falseاختبار المساواة:
// هل A تساوي C؟
areEqual(setA, setC) // true
// هل A تساوي B؟
areEqual(setA, setB) // false
// هل A تساوي D؟
areEqual(setA, setD) // falseالتحدي
سهلأنشئ دالة تسمى analyzeSetRelations تأخذ مصفوفتين كمعاملات: arr1 و arr2. يجب أن تقوم الدالة بتحويل المصفوفات إلى مجموعات وإرجاع كائن بالخصائص التالية:
isSubset: قيمة منطقية تشير إلى ما إذا كانتset1مجموعة جزئية منset2isSuperset: قيمة منطقية تشير إلى ما إذا كانتset1مجموعة شاملة لـset2isEqual: قيمة منطقية تشير إلى ما إذا كانتset1وset2تحتويان على نفس العناصر تماماً
ورقة مرجعية
تُعد المجموعة A مجموعة جزئية من المجموعة B إذا كان كل عنصر في A هو أيضاً عنصر في B. وعلى العكس من ذلك، تُعد B مجموعة شاملة لـ A إذا كانت تحتوي على جميع عناصر A. وتكون المجموعتان متساويتين إذا كانتا تحتويان على نفس العناصر تماماً.
التحقق مما إذا كانت setA مجموعة جزئية من setB:
function isSubset(setA, setB) {
return [...setA].every(element => setB.has(element));
}التحقق مما إذا كانت setA مجموعة شاملة لـ setB:
function isSuperset(setA, setB) {
return isSubset(setB, setA);
}التحقق مما إذا كانت المجموعتان متساويتين:
function areEqual(setA, setB) {
return setA.size === setB.size && isSubset(setA, setB);
}جرّب بنفسك
function analyzeSetRelations(arr1, arr2) {
let set1 = new Set(arr1);
let set2 = new Set(arr2);
// استخدم .every() و .has() للتحقق من علاقات المجموعات
let isSubset = false; // TODO: تحقق مما إذا كان كل عنصر في set1 موجوداً في set2
let isSuperset = false; // TODO: تحقق مما إذا كان كل عنصر في set2 موجوداً في set1
let isEqual = false; // TODO: تحقق مما إذا كانت كلتا المجموعتين لهما نفس الحجم وأن isSubset صحيح
return {
isSubset: isSubset,
isSuperset: isSuperset,
isEqual: isEqual
};
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1السلاسل النصية بعمق
أساسيات السلاسل النصيةالتكرار عبر السلاسل النصيةTemplate Literalsدوال السلاسل النصيةمراجعة - String Weaver2المصفوفات متعددة الأبعاد
أساسيات المصفوفات ثنائية الأبعادالوصول إلى عناصر المصفوفات ثنائية الأبعادالحلقات المتداخلة مع المصفوفات ثنائية الأبعادمراجعة - المصفوفات ثنائية الأبعادجمع وطرح المصفوفاتالمصفوفات المتعرجة (Jagged Arrays)المصفوفات ثلاثية الأبعاد وما بعدهاأنماط المصفوفات ثنائية الأبعاد الشائعةمراجعة - كل شيء عن المصفوفات5المجموعات - الجزء الأول
ما هي المجموعة؟التكرار عبر المجموعاتإضافة عنصرإزالة عنصرالتحقق من وجود عنصرالحجم وهل هي فارغةالنسخ والمسحملخص - أساسيات المجموعات8مواضيع شيقة حول الـ Arrays
تفكيك الـ Arrayاستخدام الـ Spread Syntax في الـ Arraysالـ Sparse Arraysمراجعة - ورشة عمل الـ Arrays3JSON الجزء الأول
ما هو JSON؟التحقق من وجود المفتاحObject MethodsSpread Operator الجزء الأولSpread Operator الجزء الثانيحذف المفاتيحمراجعة - معالجة مفاتيح JSON6المجموعات - الجزء الثاني
الرياضيات - اتحاد المجموعاتالرياضيات - تقاطع المجموعاتالرياضيات - الفرق بين المجموعاتالرياضيات - الفرق المتناظرالمجموعات الجزئية والمجموعات الفائقةمراجعة - مجموعات الأصدقاء