فرض کنید میخواهید عناصر یک آرایه را از سر تا ته بررسی کنید و به یک نتیجه نهایی برسید. با این شرط که هر عنصر میتواند در تغییر کردن نتیجه نهایی اثرگذار باشد، تابع reduce میتواند ابزار فوق العاده ای باشد.
مثال اعداد narcissistic میتواند نمونه خوبی برای درک استفاده از تابع reduce باشد:
فرض کنید میخواهیم یک تابع بنویسیم که یک عدد طبیعی (integer) بالای صفر بگیرد به طول دلخواه n. میخواهیم ارقام آن را به توان n برسانیم و نتیجه را با هم جمع بزنیم و بررسی کنیم که جمع نهایی با خود عدد برابر هست یا نه. خروجی تابع قرار است true یا false باشد.
راه حل این است که آرایه ای از ارقام عدد درست کنیم و به ازای هر عنصر آرایه، آن را به توان n برسانیم و با
حاصل جمع های قبلی جمع کنیم و جمع نهایی را با خود عدد بررسی کنیم.
در راه حل بالا در نظر بگیرید که ابتدا تکنیک تبدیل عدد به آرایه ای از ارقام رو میبینیم. سپس تابع reduce آرایه را صدا میکنیم.
پارامتر اول تابع reduce، تابعی است که به ازای هر عنصر آرایه صدا زده می شود. این تابع شامل ورودی p (مخفف previous که برابر است با نتیجه نهایی که تا قبل از رسیدن به عنصر فعلی آرایه به دست آمده است) و ورودی c (مخفف current و در واقع عنصر فعلی آرایه) است. تابع reducer پارامتر سومی هم دارد که ایندکس عنصر فعلی به آن پاس داده میشود.
پارامتر دوم تابع reduce، مقدار اولیه نتیجه نهایی است. اینجا مقدار اولیه برابر با صفر است (خط چهارم).
سینتکس های مختلف تابع reduce به شرح زیر است:
اگر میخواهید در مورد تابع reduce بیشتر بدانید، اینجا مطلب را مطالعه کنید.