✍️ مقدار آغازین reduce فقط برای راحتی نیست؛ بخشی از قرارداد نتیجه است. وقتی مقدار آغازین میدی، همان مقدار قبل از خواندن اولین عضو وجود دارد. اگر آرایه خالی باشه، هیچ callbackی اجرا نمیشه و همان مقدار آغازین نتیجه است. این رفتار برای گزارشهای بدون داده خیلی مهمه.
بدون مقدار آغازین، reduce معمولاً اولین عضو را به عنوان انباشتهگر شروع انتخاب میکنه. ولی در آرایه خالی اصلاً عضوی وجود ندارد و خطا رخ میده. پس برای جمع عددی، نوشتن صفر در آرگومان دوم هم معنی جمع را روشن میکنه و هم حالت خالی را پوشش میده.
در مثال پایین، مقدار شروع عمداً پنج است تا ببینی reduce الزاماً از صفر آغاز نمیشه. اول حالت دارای عضو را حساب کن: پنج با عددهای آرایه جمع میشه. سپس حالت خالی را بررسی کن؛ هیچ عضوی برای اضافه شدن وجود ندارد. خطای رایج، تصور اینه که آرایه خالی همیشه صفر میده؛ خروجی خالی به مقدار آغازینی بستگی دارد که خودمان انتخاب کردهایم.
const sum = values => values.reduce((total, value) => total + value, 5);
console.log(sum([2, 3]));
console.log(sum([]));
فعالیت شما
دو خروجی جمع را به ترتیب انتخاب کن؛ مقدار آغازین هر دو reduce برابر 5 است.