حالت آفلاین — محتوا از حافظهٔ کش نمایش داده می‌شود
آموزش جاوااسکریپت تکمیلی؛ توابع و پردازش داده

ترکیب filter و reduce در جاوااسکریپت؛ گزارش امتیازها

تجمیع داده‌ها در جاوااسکریپت با reduce · 0٪

✍️ حالا می‌تونیم دو سؤال جدا را به دو مرحله روشن تبدیل کنیم: کدام امتیازها پذیرفته می‌شن و از امتیازهای پذیرفته‌شده چه گزارشی می‌خوایم؟ filter مرحله انتخاب است و reduce مرحله ساخت گزارش. این جداسازی معمولاً خواندن شرط و بررسی عددهای نهایی را ساده‌تر می‌کنه.

مثلاً برای امتیازهای [3,8,10] با حداقل هشت، داده میانی [8,10] می‌شه. بعد گزارش شامل تعداد دو و مجموع هجده است. اگر چیزی پذیرفته نشه، گزارش هنوز شکل ثابتی دارد: تعداد صفر و مجموع صفر. داشتن شکل ثابت باعث می‌شه مصرف‌کننده گزارش مجبور نباشه برای نبودن داده، نوع دیگری از خروجی را مدیریت کنه.

در این تمرین، مقدار برابر حداقل پذیرفته می‌شه و عددهای تکراری جداگانه حساب می‌شن. ورودی را مرتب یا تغییر نده؛ گزارش فقط نتیجه خواندن داده‌هاست. خطای رایج، استفاده از طول آرایه اصلی برای count در کنار جمع آرایه فیلترشده است. هر دو عدد گزارش باید از همان مجموعه پذیرفته‌شده ساخته بشن تا با هم سازگار باشند.

فعالیت شما

summarizeScores(scores, minimum) را بنویس. scores آرایه اعداد متناهی و minimum عدد متناهی است. فقط امتیازهای >= minimum را حساب کن و {count,total} برگردان؛ ([3,8,10],8) => {count:2,total:18}. بدون پذیرفته‌شده یا آرایه خالی => {count:0,total:0}. ورودی را تغییر نده. تابع کمکی آماده checkSummarizeScoresUnchanged فقط تغییر نکردن ورودی و، هرجا لازم است، تازه بودن خروجی را بررسی می‌کند؛ آن را تغییر نده.

مطالعهٔ این گام برای همه آزاد است

برای پاسخ‌دادن، بررسی پاسخ، ثبت پیشرفت و استفاده از دستیار باید شرایط شرکت در فعالیت‌ها را داشته باشید.

برای انجام فعالیت وارد شوید

فعالیت‌های این بخش به اشتراک فعال نیاز دارند. تهیهٔ اشتراک

برای انجام فعالیت‌ها ابتدا این دوره‌های پیش‌نیاز را تکمیل کنید:

کد اولیهٔ فعالیت

function summarizeScores(scores, minimum) {
  // TODO: انتخاب و سپس ساخت گزارش با مقدار آغازین را انجام بده.
}
function checkSummarizeScoresUnchanged(scores, minimum) {
  const before = JSON.stringify([scores, minimum]);
  const result = summarizeScores(scores, minimum);
  return JSON.stringify([scores, minimum]) === before && true;
}