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

حفظ آرایه اصلی در جاوااسکریپت؛ گزارش قیمت‌های منتخب

پردازش آرایه در جاوااسکریپت با map و filter و find · 0٪

✍️ وقتی چند تبدیل را پشت سر هم انجام می‌دیم، باید بدونیم کدام متد داده تازه می‌سازه و کدام داده موجود را تغییر می‌ده. filter و map آرایه تازه می‌دن، ولی sort روی همان آرایه‌ای کار می‌کنه که از آن صدا زده شده. پس ترتیب انجام کارها هم روی نتیجه اثر دارد و هم روی محفوظ ماندن ورودی.

برای نمونه، اگر اول از همه روی فهرست اصلی sort اجرا کنیم و بعد قیمت‌ها را انتخاب کنیم، گزارش اصلی هم ناخواسته مرتب شده. ولی اگر اول filter کنیم، خروجی آن یک آرایه مستقل است و مرتب کردنش ترتیب فهرست ورودی را تغییر نمی‌ده. یک کپی صریح با spread یا slice هم راه معتبر دیگری است.

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

فعالیت شما

safePriceReport(prices, minimum) را بنویس. ورودی آرایه اعداد متناهی و minimum عدد متناهی است. خروجی {selected, original} باشد: selected قیمت‌های >= minimum با ترتیب عددی نزولی و حفظ تکرار؛ original کپی ترتیب ورودی بدون تغییر آن. ([10,40,20],20) => {selected:[40,20],original:[10,40,20]}. خالی => دو آرایه خالی. تابع کمکی آماده checkSafePriceReportUnchanged فقط تغییر نکردن ورودی و، هرجا لازم است، تازه بودن خروجی را بررسی می‌کند؛ آن را تغییر نده.

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

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

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

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

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

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

function safePriceReport(prices, minimum) {
  // TODO: انتخاب و مرتب‌سازی را بدون دستکاری prices انجام بده.
}
function checkSafePriceReportUnchanged(prices, minimum) {
  const before = JSON.stringify([prices, minimum]);
  const result = safePriceReport(prices, minimum);
  return JSON.stringify([prices, minimum]) === before && result.selected !== prices && result.original !== prices;
}