الانتقال إلى المحتوى الرئيسي
الوحدة 6 · الدرس 2 من 422/32 في الدورة~12 min
دروس الوحدة (2/4)

تقليل

reduce هو أقوى أساليب المصفوفة الوظيفية: فهو يتنقل عبر المجموعة الاحتفاظ بـ المراكم الذي يتم تحديثه في كل خطوة. عندما تنتهي الحلقة، فإنها ترجع تراكم.

إمضاء

JS
arr.reduce((acc, elem) => nuovoAcc, valoreIniziale);
  • acc يبدأ في valoreIniziale.
  • لكل عنصر يتم حساب acc جديد.
  • النتيجة النهائية هي آخر acc.

الأمثلة الأساسية: المجموع والمنتج

JS
const numeri = [3, 1, 4, 1, 5];

const somma = numeri.reduce((a, n) => a + n, 0);
// 14

const prodotto = numeri.reduce((a, n) => a * n, 1);
// 60

بدون قيمة أولية، reduce يبدأ من العنصر الأول (يشكل خطرًا على العناصر الفارغة المحتملة المصفوفات → خطأ). ** قم دائمًا بتمرير قيمة أولية ** عندما تستطيع ذلك.

بناء كائن: العد

JS
const parole = ['mela', 'pera', 'mela', 'kiwi', 'mela'];

const conteggio = parole.reduce((acc, p) => {
  acc[p] = (acc[p] ?? 0) + 1;
  return acc;
}, {});
// { mela: 3, pera: 1, kiwi: 1 }

العثور على الحد الأقصى / دقيقة

JS
const nums = [3, 7, 1, 9, 4];

const max = nums.reduce((a, n) => (n > a ? n : a), -Infinity);
// 9

(من الناحية العملية، يفضل الحد الأقصى/الدقيقة Math.max(...nums)؛ وهذا مثال تعليمي.)

جربه

تمرين#js.m6.l2.e1
المحاولات: 0جارٍ التحميل…

حدد "الإجمالي (العناصر)": تتلقى مجموعة من العناصر { السعر، الكمية } وإرجاع إجمالي الإنفاق (مجموع السعر * الكمية). استخدم تقليل.

جارٍ تحميل المحرر…
إظهار التلميح

تقليل ((a، it) => a + it.price * it.quantity، 0)

الحل متاح بعد 3 من المحاولات

تمرين المراجعة

تمرين#js.m6.l2.e2
المحاولات: 0جارٍ التحميل…

تعريف `count(words)`: بالنظر إلى مصفوفة من السلاسل، قم بإرجاع كائن يعين كل سلسلة إلى عدد التكرارات. استخدم تقليل مع تراكم الكائن.

جارٍ تحميل المحرر…
إظهار التلميح

acc[p] = (acc[p] ?? 0) + 1; العودة حسب ؛

الحل متاح بعد 3 من المحاولات