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

رفع باگ sort عددی در جاوااسکریپت؛ مرتب‌سازی امتیازها

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

✍️ متد sort اگر تابع مقایسه نداشته باشه، عضوها را بر اساس نمایش رشته‌ای مرتب می‌کنه. به همین دلیل ممکنه ۱۰۰ قبل از ۲۰ قرار بگیره؛ اولین کاراکتر «1» از «2» کوچک‌تر است. برای ترتیب عددی باید به sort بگیم اختلاف دو عدد چه علامتی دارد.

تابع مقایسه (a, b) => a - b ترتیب صعودی می‌سازه. نتیجه منفی یعنی a جلوتر بیاد، نتیجه مثبت یعنی b جلوتر بیاد و صفر یعنی از نظر این مقایسه برابرند. لازم نیست حتماً فقط ۱ یا منفی ۱ برگردونی؛ علامت نتیجه مهمه. برای ترتیب نزولی، اختلاف را برعکس می‌نویسیم.

نکته دوم اینه که sort خود آرایه را تغییر می‌ده. در تمرین، با slice() یک آرایه تازه داریم و فقط باید مقایسه را درست کنی. خطای رایج اینه که برای درست شدن یک نمونه، ورودی‌ها را رشته یا عدد تک‌رقمی فرض کنیم. عدد منفی، عدد چندرقمی و عضو تکراری هم باید با همان قاعده عددی مرتب شوند.

فعالیت شما

sortedScores(scores) را اصلاح کن. scores آرایه اعداد متناهی است. آرایه تازه با ترتیب عددی صعودی برگردان و ورودی را تغییر نده؛ [30,4,100] => [4,30,100]، خالی => [] و عددهای تکراری حفظ شوند. تابع کمکی آماده checkSortedScoresUnchanged فقط تغییر نکردن ورودی و، هرجا لازم است، تازه بودن خروجی را بررسی می‌کند؛ آن را تغییر نده.

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

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

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

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

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

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

function sortedScores(scores) {
  const result = scores.slice();
  // TODO: مقایسه عددی sort را کامل کن.
  return result;
}
function checkSortedScoresUnchanged(scores) {
  const before = JSON.stringify([scores]);
  const result = sortedScores(scores);
  return JSON.stringify([scores]) === before && result !== scores;
}