javascriptArray.reduce()خلاصهسازی آرایه با reduce در جاوااسکریپت
reduce در جاوااسکریپت دادههای آرایه را به یک نتیجهٔ تجمیعی تبدیل میکند؛ جمع هزینهها، نقش انباره و مقدار اولیه در آرایهٔ خالی را یاد بگیرید.
مفهوم به زبان ساده
وقتی از چند ردیف هزینه یک مجموع میخواهیم، باید نتیجهٔ هر گام به گام بعدی برسد. reduce این الگو را با یک انباره یا accumulator بیان میکند. تابع آن، نتیجهٔ تا اینجا و عضو فعلی را میگیرد و انبارهٔ بعدی را برمیگرداند. نتیجهٔ آخر، خروجی خود reduce است.
در مثال، مبلغ دو ردیف معتبر را با مقدار اولیهٔ صفر جمع میکنیم. بار نخست، انباره صفر و مبلغ ردیف اول ۴۰۰۰۰ است؛ نتیجهٔ ۴۰۰۰۰ وارد گام دوم میشود و به ۱۰۰۰۰۰ میرسد. مقدار اولیه بهخصوص برای آرایهٔ خالی مهم است: با صفر، نتیجه صفر میماند؛ بدون مقدار اولیه، reduce روی آرایهٔ خالی خطا میدهد.
هر شاخهٔ تابع محاسبه باید انبارهٔ بعدی را برگرداند. فراموشکردن return در بدنهٔ بلوکی میتواند نتیجهٔ گام بعد را undefined کند. این الگو جای اعتبارسنجی مبلغها را نمیگیرد؛ نمونه عدد صحیح معتبر فرض کرده و مجموعهای واقعی ممکن است به بررسی محدوده هم نیاز داشته باشند. همچنین برای هر مسئله reduce لازم نیست؛ اگر یک حلقهٔ کوتاه منظور را بهتر نشان میدهد، همان را بنویسید. برای تمرین، یک ردیف و سپس هیچ ردیفی را امتحان کنید.
کجا به کار میآید؟
- محاسبهٔ مجموع هزینه یا تعداد از فهرست ردیفها
- ساخت نتیجهٔ تجمیعی با انبارهٔ قابل توضیح
از تعریف تا یک مثال واقعی
const expenses = [{ amount: 40000 }, { amount: 60000 }];
const total = expenses.reduce((sum, expense) => sum + expense.amount, 0);
console.log(total);
console.log([].reduce((sum, value) => sum + value, 0));
console.log(expenses.length);
100000 0 2
این مثال چطور کار میکند؟
انباره با صفر شروع میشود.
مبلغ ردیف اول به صفر و مبلغ ردیف دوم به نتیجهٔ قبلی اضافه میشود.
برای آرایهٔ خالی هیچ گامی اجرا نمیشود و مقدار اولیه برمیگردد.
خود آرایهٔ نمونه در این محاسبه تغییر نمیکند.
اشتباه رایج
آرایهٔ خالی و نبود مقدار اولیه، خطاست. در callback با آکولاد نیز return انبارهٔ بعدی را فراموش نکنید.
این را به خاطر بسپارید
reduce نتیجهٔ هر گام را به گام بعد میدهد؛ مقدار اولیه و خروجی callback بخشی از قرارداد محاسبهاند.