الدرس 8 من 8

التقاطع والفرق

هدف الدرس

من n×m إلى n+m

01

الشرح

«من سجّل في المادّتين؟» و«من سجّل في الأولى وحدها؟» سؤالان يتكرّران بصور كثيرة، مثل الوسوم المشتركة، والمعرّفات المحذوفة، والصلاحيات الناقصة.

والحلّ الذي يخطر أولًا هو a.filter(x => b.includes(x))، وهو يمرّ على b كاملة مع كل عنصر من a، فإذا كان في كل منهما ألف عنصر احتجت إلى مليون مقارنة. والأفضل أن تبني من b مجموعة Set مرّة واحدة، ثم تستعمل has مع كل عنصر، فتحتاج إلى ألفي خطوة بدل مليون.

والخطأ الشائع أن تبني المجموعة داخل الدالة التي تمرّرها إلى filter، فالكود a.filter(x => new Set(b).has(x)) يبني مجموعة جديدة مع كل عنصر، فيصير أبطأ من includes نفسها.

02

المطلوب

اكتب intersect(a, b) لتُرجع العناصر الموجودة في المصفوفتين، وdifference(a, b) لتُرجع ما في a وليس في b، على أن تحافظ الدالتان على ترتيب a، وتقرأ كلّ منهما b مرّة واحدة.

الفحوص

6 فحوص
  1. الدالة intersect تُرجع العناصر المشتركة
  2. الدالة intersect تحفظ ترتيب المصفوفة الأولى
  3. الدالة difference تُرجع ما في الأولى وحدها
  4. المصفوفات الفارغة لا تسبّب خطأ في الدالتين
  5. الدالة intersect تقرأ الثانية مرّة واحدة
  6. الدالة difference تقرأ الثانية مرّة واحدة
03

تلميحات

0/3
دروس المسارأتممت 0 من 8

تكتب هنا مرّة واحدة دوالًا تستعملها في كل مشروع بعد ذلك، مثل البحث والترتيب والتجميع وتسطيح القوائم المتداخلة.

مستواه متقدّم، وفيه 8 دروس مجموع مدّتها ساعة ونصف.

index.html
المعاينة
index.html100%
–/6

اضغط «تشغيل وتصحيح» ليبدأ الفحص.

تجد 6 فحوص في بطاقة «المطلوب».

دروس المسارأتممت 0 من 8

تكتب هنا مرّة واحدة دوالًا تستعملها في كل مشروع بعد ذلك، مثل البحث والترتيب والتجميع وتسطيح القوائم المتداخلة.

مستواه متقدّم، وفيه 8 دروس مجموع مدّتها ساعة ونصف.