این متد نیز دقیقاً همانند ()map. و ()reduce. یک callback برای هر عنصر آرایه بازمیگرداند. تنها تفاوت این است که در اینجا ارسال نتیجه این callback (یعنی accumulator) از یک عنصر به عنصر دیگر صورت نمیگیرد.
Accumulator میتواند هر چیزی باشد (عدد صحیحی، رشته، شیء و غیره) و باید هنگام فراخوانی ()reduce. یک وهله از آن ایجاد یا ارسال شود.
اینک نوبت به بررسی یک مثال رسیده است. فرض کنید آرایهای داریم که در آن اسامی خلبانها و سنوات خدمتشان آمده است:
میخواهیم کل سالهای سنوات خدماتی همه خلبانها را بدانیم. این کار با استفاده از متد ()reduce. کاملاً سرراست است:
دقت کنید که مقدار آغازین به صورت 0 تعیین شده است. در صورت نیاز میتوان از یک متغیر موجود نیز استفاده کرد. پس از اجرای callback برای هر عنصر آرایه، متد reduce مقدار نهایی accumulator ما را که در این مورد برابر با 82 است بازمیگرداند. در قطعه کد زیر نسخه فشرده کد فوق با استفاده از تابعهای arrow در ES6 را میبینید:
اینک فرض کنید میخواهم بدانیم کدام خلبان از همه باتجربهتر است. بدین منظور نیز میتوانیم از reduce استفاده کنیم:
ما accumulator خود را oldest مینامیم. Callback ما اقدام به مقایسه accumulator هر خلبان میکند. اگر خلبانی سالهای خدمتی بالاتر از متغیر oldest داشته باشد، در این صورت آن خلبان به oldest جدید تبدیل میشود و این روند همین طور تا آخر تداوم مییابد.
همان طور که شاهد هستید استفاده از ()reduce. روشی آسان برای تولید مقدار منفرد یا شیء از یک آرایه محسوب میشود.