الدرس 6 من 8

البحث السريع بالمعرّف

هدف الدرس

بناء الفهرس مرّة والبحث بخطوة واحدة

01

الشرح

لكل طلب معرّف مستخدم، وتريد أن تعرف اسم هذا المستخدم. فإذا كتبت 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 قبل البحث.

02

المطلوب

أعد كتابة withNames(orders, users) باستعمال فهرس من نوع Map، وwithoutBlocked(orders, blockedIds) باستعمال Set، بحيث تبقى النتائج نفسها وتُقرأ كل قائمة مرّة واحدة فقط.

الفحوص

5 فحوص
  1. الدالة withNames تضيف الاسم الصحيح
  2. المستخدم غير الموجود يأخذ الاسم «مجهول»
  3. قائمة المستخدمين تُقرأ مرّة واحدة وليس مع كل طلب
  4. الدالة withoutBlocked تستبعد المحظورين
  5. قائمة الحظر تُقرأ مرّة واحدة وليس مع كل طلب
03

تلميحات

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

تعرف في هذا المسار أين يضيع الوقت فعلًا في صفحتك، وكيف توفّره بإضافة العناصر مرّة واحدة وتقليل الاستدعاءات وعدم تكرار الحساب.

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

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

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

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

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

تعرف في هذا المسار أين يضيع الوقت فعلًا في صفحتك، وكيف توفّره بإضافة العناصر مرّة واحدة وتقليل الاستدعاءات وعدم تكرار الحساب.

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