✍️ انباشتهگر reduce میتونه یک شیء باشه. برای شمارش وضعیتها، هر وضعیت را به عنوان کلید نگه میداریم و تعداد دیده شدنش را افزایش میدیم. این ساختار کمک میکنه به جای چند بار پیمایش برای هر وضعیت، همه شمارشها را در یک عبور انجام بدیم.
مثلاً از ['red','blue','red'] میتونیم گزارش {red:2,blue:1} بسازیم. وقتی کلید برای اولین بار دیده میشه، شمارش قبلی ندارد؛ پس مقدار قبلی را صفر در نظر میگیریم. بعد یک واحد اضافه میکنیم. در پایان هر دور هم باید همان شیء انباشتهگر را برگردونیم تا دور بعد آن را دریافت کنه.
در این تمرین نام وضعیتها محدود است و فقط کلیدهایی که واقعاً دیده شدهاند باید در خروجی باشند. آرایه خالی باید شیء خالی بده، نه صفر یا آرایه. خطای رایج، تنظیم همیشگی شمارش روی یک است؛ این کار وجود وضعیت را نشان میده ولی تعداد تکرار را از دست میده. یک نمونه با وضعیت تکراری را دستی حساب کن تا فرق این دو رفتار روشن بشه.
فعالیت شما
countByStatus(statuses) را کامل کن. statuses آرایه رشتههای 'new'، 'paid' یا 'cancelled' است. شیئی از تعداد هر وضعیت دیدهشده بساز؛ ['paid','new','paid'] => {paid:2,new:1}. کلید دیدهنشده اضافه نشود و ورودی خالی => {}.