✍️ متد reduce چند عضو را به یک نتیجه تبدیل میکنه. نتیجه میتونه عدد، شیء یا حتی آرایه باشه. callback آن یک انباشتهگر یا accumulator میگیره؛ یعنی نتیجهای که تا این لحظه ساخته شده. عضو فعلی را به این نتیجه اضافه میکنیم و مقدار تازه را برای دور بعد برمیگردونیم.
در مثال هزینه ارسال، مقدار آغازین صفر است. برای هر بسته، وزنش با جمع قبلی جمع میشه. بعد از آخرین عضو، همان جمع نهایی خروجی reduce میشه. اگر هیچ بستهای وجود نداشته باشه، مقدار آغازین صفر مستقیم برمیگرده. همین ویژگی کمک میکنه رفتار حالت خالی هم از اول روشن باشه.
خطای رایج، فراموش کردن return در بدنه آکولادی callback است. انباشتهگر دور بعد، خروجی دور قبله؛ اگر چیزی برنگردونی، ادامه محاسبه خراب میشه. قبل از نوشتن reduce، این جمله را کامل کن: «نتیجه من از چه نوعی است و مقدار شروع آن چیست؟» برای جمع، پاسخ عدد و صفر است؛ برای شمارش گروهها بعداً یک شیء انتخاب میکنیم.
const weights = [2, 5, 3];
const total = weights.reduce((sum, weight) => sum + weight, 0);
console.log(total); // 10
console.log([].reduce((sum, weight) => sum + weight, 0)); // 0
فعالیت شما
نقش total، weight و مقدار آغازین صفر را در مثال جمع وزنها دنبال کن.