الدرس 6 من 8
فهرس بالمعرّف
- 13 دقيقة
- 5 معايير للتصحيح
- 3 تلميحات
- إلى المطلوب
هدف الدرس
ابنِ الفهرس مرّة، وابحث بخطوة
الشرح
لكل طلب معرّف مستخدم، وتريد اسمه. users.find(u => u.id === order.userId) داخل حلقة الطلبات يمرّ على قائمة المستخدمين مع كل طلب: أربعة آلاف طلب في أربعة آلاف مستخدم تعني ملايين المقارنات.
ابنِ فهرسًا مرّة واحدة — new Map(users.map(u => [u.id, u])) — فيصير كل بحث get خطوة واحدة مهما طالت القائمة. وسؤال «هل هو موجود؟» كذلك: includes داخل حلقة يصير Set وhas.
الفخّ: Map تقارن المفاتيح بنوعها: get('7') لا يجد المفتاح 7. والمعرّفات القادمة من dataset أو الرابط نصوص دائمًا، فحوّلها بـ Number قبل البحث.
المطلوب
أعد كتابة withNames(orders, users) بفهرس Map، وwithoutBlocked(orders, blockedIds) بـ Set — بالنتائج نفسها، وكل قائمة تُقرأ مرّة واحدة.
معايير التصحيح
5 معايير- withNames تضيف الاسم الصحيح
- المستخدم المفقود يأخذ «مجهول»
- كل مستخدم يُقرأ مرّة لا مع كل طلب
- withoutBlocked تستبعد المحظورين
- قائمة الحظر تُقرأ مرّة لا مع كل طلب