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

پروژه نهایی جاوااسکریپت؛ گزارش کامل سفارش‌ها و مشتری برتر

پروژه گزارش سفارش‌ها در جاوااسکریپت · 0٪

✍️ حالا اجزای پروژه را به یک تابع قابل استفاده وصل می‌کنیم. گزارش نهایی سه تصمیم مستقل دارد: چند سفارش paid معتبر داریم، جمع درآمدشان چقدر است و کدام مشتری بیشترین مجموع خرید را دارد. مشتری برتر را از مبلغ یک سفارش انتخاب نکن؛ ممکنه چند خرید کوچک یک نفر از خرید بزرگ فرد دیگری بیشتر بشه.

قرارداد داده در تمام پروژه ثابت است: orders اگر آرایه نباشد، داده‌ای نداریم. هر ردیف معتبر باید شیء غیرnull و غیرآرایه باشد؛ status دقیقاً 'paid' یا 'cancelled'، customer رشته‌ای با trim غیرخالی و total عدد واقعی متناهی نامنفی باشد. نام مشتری با trim یکسان‌سازی می‌شود؛ حروف بزرگ و کوچک متفاوت‌اند. ویژگی اضافه مجاز است. ردیف نامعتبر نادیده گرفته می‌شود و چیزی در ورودی تغییر نمی‌کند.

در تساوی مجموع خرید، مشتری‌ای برنده است که اولین سفارش paid معتبرش زودتر در ورودی آمده؛ نه کسی که زودتر به یک مجموع موقت رسیده. برای نمونه خریدهای آوا ۲، نیما ۵ و دوباره آوا ۳، مجموع هر دو را پنج می‌کنه و آوا برنده است. اول جمع همه گروه‌ها را کامل کن، بعد با ترتیب اولین حضورشان برنده را انتخاب کن.

خطای رایج، جایگزین کردن برنده در برابری است. فقط مبلغ واقعاً بیشتر باید برنده قبلی را عوض کنه. نام‌های عددنما هم مجازند؛ Map ترتیب اولین حضور را بدون مرتب‌سازی کلیدها نگه می‌داره. helper آماده فقط تغییر نکردن ورودی را بررسی می‌کنه و لازم نیست آن را بازنویسی کنی.

فعالیت شما

summarizeOrders(orders) را بنویس. قرارداد داده در تمام پروژه ثابت است: orders اگر آرایه نباشد، داده‌ای نداریم. هر ردیف معتبر باید شیء غیرnull و غیرآرایه باشد؛ status دقیقاً 'paid' یا 'cancelled'، customer رشته‌ای با trim غیرخالی و total عدد واقعی متناهی نامنفی باشد. نام مشتری با trim یکسان‌سازی می‌شود؛ حروف بزرگ و کوچک متفاوت‌اند. ویژگی اضافه مجاز است. ردیف نامعتبر نادیده گرفته می‌شود و چیزی در ورودی تغییر نمی‌کند. فقط paid معتبر را حساب کن و دقیقاً {paidCount,revenue,topCustomer} بده: تعداد سفارش‌ها، جمع total بدون گرد کردن، و نام trimشده مشتری با بیشترین مجموع خرید. تساوی => اولین حضور paid معتبر آن مشتری در ورودی. نام عددنما و 'proto' هم مجاز است. بدون paid معتبر => {paidCount:0,revenue:0,topCustomer:null}. paid صفر شمرده می‌شود و می‌تواند برنده باشد. نمونه [آوا 2، نیما 5، آوا 3] => {paidCount:3,revenue:10,topCustomer:'آوا'}. ورودی و اشیایش تغییر نکنند. checkOrdersUnchanged آماده است و برای بررسی این شرط استفاده می‌شود.

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

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

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

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

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

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

function summarizeOrders(orders) {
  // TODO: اعتبارسنجی، شمارش، درآمد و مجموع مشتری‌ها را پیاده کن.
  // TODO: برنده نهایی را با قاعده تساوی انتخاب کن.
}
function checkOrdersUnchanged(orders) {
  const before = JSON.stringify(orders);
  summarizeOrders(orders);
  return JSON.stringify(orders) === before;
}