✍️ وقتی چند تبدیل را پشت سر هم انجام میدیم، باید بدونیم کدام متد داده تازه میسازه و کدام داده موجود را تغییر میده. 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 فقط تغییر نکردن ورودی و، هرجا لازم است، تازه بودن خروجی را بررسی میکند؛ آن را تغییر نده.