Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

دالة Reduce

جزء من قسم Logic & Flow في رحلة JavaScript على Coddy. الدرس 54 من 65.

تسمح لك طريقة reduce() بـ "تقليل" array إلى قيمة واحدة عن طريق تنفيذ function محدودة لكل عنصر في array. يمكن أن تكون هذه القيمة الواحدة رقمًا أو سلسلة نصية أو object أو حتى array آخر.

فيما يلي بناء الجملة الخاص بـ reducer:

array.reduce(function(accumulator, currentValue, currentIndex, array) {
    // أرجع قيمة الـ accumulator المحدّثة
}, initialValue);

المكونات الرئيسية:

  1. accumulator: يجمع القيم المعادة من دالة الاستدعاء (callback) (فكر فيه كإجمالي تراكمي)
  1. currentValue: العنصر الحالي الذي يتم معالجته في array
  1. currentIndex: (اختياري) فهرس العنصر الحالي
  1. array: (اختياري) المصفوفة التي تم استدعاء reduce() عليها
  1. initialValue: (اختياري) قيمة تُستخدم كأول وسيط في الاستدعاء الأول لدالة الاستدعاء (callback function)

على سبيل المثال - مجموع الأعداد:

const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((acc, curr) => acc + curr, 0);
console.log(sum); // 15

كيف يعمل خطوة بخطوة:

const numbers = [1, 2, 3, 4];
const sum = numbers.reduce((acc, curr) => {
    console.log(`Accumulator: ${acc}, Current Value: ${curr}`);
    return acc + curr;
}, 0);

// المخرجات:
// المتراكم: 0، القيمة الحالية: 1
// المتراكم: 1، القيمة الحالية: 2
// المتراكم: 3، القيمة الحالية: 3
// المتراكم: 6، القيمة الحالية: 4
// النتيجة النهائية: 10
challenge icon

التحدي

سهل

قم بإنشاء دالة باسم calculateGroceryTotal تأخذ مصفوفة من الكائنات (objects) التي تمثل عناصر البقالة.

كل كائن يحتوي على خاصيتين:

  • name: نص (اسم العنصر)
  • price: رقم (سعر العنصر)

يجب على الدالة القيام بما يلي:

  1. حساب التكلفة الإجمالية لجميع العناصر
  2. تطبيق خصم: - إذا كان الإجمالي أكبر من 100، يتم تطبيق خصم 10%
  3. إذا كان الإجمالي أكبر من 50 وأقل من أو يساوي 100، يتم تطبيق خصم 5%
  4. لا يوجد خصم للإجمالي الذي يساوي 50 أو أقل.

إرجاع كائن يحتوي على:

  • originalTotal: المجموع قبل الخصم
  • discount: المبلغ المخصوم
  • finalTotal: المبلغ النهائي بعد الخصم

جرّب بنفسك

function calculateGroceryTotal(items) {
    // اكتب الكود هنا
    


    return {
        originalTotal: Math.round(originalTotal * 100) / 100,  // قرّب إلى منزلتين عشريتين
        discount: Math.round(discount * 100) / 100,
        finalTotal: Math.round(finalTotal * 100) / 100
    };
}
quiz iconاختبر نفسك

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

جميع دروس Logic & Flow

تدرّب بنفسك: مترجم JavaScript عبر الإنترنت