طريقة Reduce
جزء من قسم المنطق وتدفق التنفيذ في رحلة JavaScript على Coddy. الدرس 54 من 65.
تتيح لك الطريقة reduce() «اختزال» مصفوفة إلى قيمة واحدة من خلال تنفيذ دالة مُعطاة لكل عنصر في المصفوفة. ويمكن أن تكون هذه القيمة الواحدة رقمًا أو سلسلة نصية أو كائنًا أو حتى مصفوفة أخرى.
إليك صياغة المخفِّض:
array.reduce(function(accumulator, currentValue, currentIndex, array) {
// أعِد القيمة المحدّثة للمتغير accumulator
}, initialValue);المكوّنات الأساسية:
- المُراكِم: يجمع القيم التي تُعيدها دالة رد النداء (فكّر فيه على أنه الإجمالي التراكمي)
- currentValue: العنصر الحالي الذي تتم معالجته في المصفوفة
- currentIndex: (اختياري) فهرس العنصر الحالي
- array: (اختياري) المصفوفة التي استُدعيت عليها reduce()
- 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التحدي
سهلأنشئ دالة باسم calculateGroceryTotal تستقبل مصفوفة من الكائنات التي تمثل مواد البقالة.
لكل كائن خاصيتان:
name: سلسلة نصية (اسم المادة)price: رقم (سعر المادة)
ينبغي أن تقوم الدالة بما يلي:
- حساب التكلفة الإجمالية لجميع المواد
- تطبيق خصم: - إذا كان الإجمالي أكبر من 100، طبّق خصمًا بنسبة 10%
- إذا كان الإجمالي أكبر من 50 وأقل من أو يساوي 100، طبّق خصمًا بنسبة 5%
- لا يوجد خصم للإجماليات التي تبلغ 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
};
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق التنفيذ
1السلاسل النصية بالتفصيل
أساسيات السلاسل النصيةالتكرار على السلاسل النصيةالقوالب النصيةدوال السلاسل النصيةمراجعة - ناسج السلاسل النصية2المصفوفات متعددة الأبعاد
أساسيات المصفوفات ثنائية الأبعادالوصول إلى عناصر المصفوفة ثنائية الأبعادالحلقات المتداخلة مع المصفوفات ثنائية الأبعادمراجعة: المصفوفات ثنائية الأبعادجمع المصفوفات وطرحهاالمصفوفات متعرجة الأبعادالمصفوفات ثلاثية الأبعاد وما بعدهاأنماط شائعة للمصفوفات ثنائية الأبعادمراجعة: كل ما يتعلق بالمصفوفات5المجموعات - الجزء الأول
ما هي المجموعة؟التكرار على عناصر المجموعةإضافة عنصرإزالة عنصرالتحقق من وجود عنصرالحجم والتحقق من الفراغالنسخ والمسحمراجعة - أساسيات المجموعات8موضوعات شيقة حول المصفوفات
تفكيك المصفوفاتصياغة الانتشار في المصفوفاتالمصفوفات المتناثرةمراجعة - ورشة عمل حول المصفوفات3JSON الجزء 1
ما هو JSON؟التحقق من وجود المفتاحطرق الكائنعامل الانتشار الجزء 1عامل الانتشار الجزء 2حذف المفاتيحمراجعة - معالجة المفاتيح في JSONتدرّب بنفسك: مترجم JavaScript عبر الإنترنت