Menu
CoddyTech

طريقة Reduce

جزء من قسم المنطق وتدفق التنفيذ في رحلة JavaScript على Coddy. الدرس 54 من 65.

تتيح لك الطريقة reduce() «اختزال» مصفوفة إلى قيمة واحدة من خلال تنفيذ دالة مُعطاة لكل عنصر في المصفوفة. ويمكن أن تكون هذه القيمة الواحدة رقمًا أو سلسلة نصية أو كائنًا أو حتى مصفوفة أخرى.

إليك صياغة المخفِّض:

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

المكوّنات الأساسية:

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

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

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 تستقبل مصفوفة من الكائنات التي تمثل مواد البقالة.

لكل كائن خاصيتان:

  • 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اختبر نفسك

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

جميع دروس المنطق وتدفق التنفيذ

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