إنها محررات مصفوفات غير قابلة للتغيير — تُرجع قيمة جديدة بدلاً من تعديل الأصلية، مما يؤدي إلى كود أنظف وأكثر إعلانية من حلقات for اليدوية.
js
nums = [, , , ];
nums.( n * );
nums.( n % === );
nums.( sum + n, );
إنها محررات مصفوفات غير قابلة للتغيير — تُرجع قيمة جديدة بدلاً من تعديل الأصلية، مما يؤدي إلى كود أنظف وأكثر إعلانية من حلقات for اليدوية.
nums = [, , , ];
nums.( n * );
nums.( n % === );
nums.( sum + n, );
تمشي reduce عبر المصفوفة وتحمل "مجمِّعًا". تُرجع كل خطوة المجمِّع الجديد:
// step 0: acc=0, n=1 → 1
// step 1: acc=1, n=2 → 3
// step 2: acc=3, n=3 → 6
// step 3: acc=6, n=4 → 10
إنها ليست فقط للمجاميع — يمكن لـ reduce أن تبني objects أو تجمع العناصر أو تسطح:
users.reduce((acc, u) => { acc[u.id] = u; return acc; }, {}); // index by id
تتسلسل بنظافة وليس لديها تأثيرات جانبية، وهذا يهم في واجهات المستخدم القائمة على الحالة. استخدم forEach فقط للتأثيرات الجانبية (لا ترجع شيء). بالنسبة للمصفوفات الضخمة حيث كنت ستسلسل عدة مرات، يمكن أن تكون reduce الواحدة أو حلقة عادية أكثر كفاءة.