تابستون داره تموم میشه ها، فرصت‌ها محدودن کلی آفر جذاب در کمپین تابستون🔥👇
۰ ثانیه
۰ دقیقه
۰ ساعت
۰ حامد معتقد
توضیحات تکمیلی در خصوص مرتب سازی آرایه عددی array.sort(comparefn)
جامعه جاوا اسکریپت ایجاد شده در ۲۱ اردیبهشت ۱۴۰۲

متد sort با گرفتن یک تابع مقایسه ای به صورت callback function می‌تواند برای مقایسه ی مقادیر عددی مورد استفاده قرار گیرد. بدین صورت

function comparefn(a,b){
  //The compare function of the sort() method accepts two arguments and returns a value that determines the sort order. 
  }

تابع مقایسه ای مربوط به متد Sort() دو مقدار ورودی را گرفته و (مبتنی بر منطق تعریف شده برای آن) یک مقدار برمی گرداند که طبق آن طریقه ی مرتب سازی را تعیین می‌کند.

___________________________________________________________

*** نکته***

متد sort هر بار در پاس دادن دو مقدار منتخب از اعضای آرایه، عضو با اندیس بیشتر را به a و عضو با اندیس کوچکتر را به b پاس می‌دهد.

___________________________________________________________

باید توجه داشت که مقدار بازگشتی callback function:

  • اگر return value منفی باشد متد sort متوجه می‌شود که مقداری که به a پاس داده شده است جایگاه پایین‌تری (اندیس کوچکتر) از مقدار پاس داده شده به b خواهد داشت.
  • اگر return value مثبت باشد متد sort متوجه می‌شود که مقداری که به a پاس داده شده است جایگاه بالاتری (اندیس بزرگتر) از مقدار پاس داده شده به b خواهد داشت.
  • اگر return value صفر باشد متد sort متوجه می‌شود که مقداری که به a و b پاس داده شده جایگاه یکسانی دارند.

___________________________________________________________

به عنوان یک مثال اگر بخواهیم اعضای آرایه numbers را به گونه ای مرتب کنیم که مقادر از کوچک به بزرگ باشد:

می توان از کد زیر استفاده کرد:

var numbers = [2, 3, 4, 8, 9, 16, 27, 32, 64, 81];
function comparefn(a, b) {
  if(a > b) return 1;  // the sort() method sorts b to a lower index than a.
  if(a < b) return -1; // the sort() method sorts a to a lower index than b.
  return 0//the sort() method considers a equals b and leaves their positions unchanged.
}
numbers.sort(comparefn);
console.log(numbers);

به عنوان یک مثال دیگر اگر بخواهیم اعضای آرایه numbers را به گونه ای مرتب کنیم که هر دو شرط زیر برقرار باشد:

در اولویت اول: همه ی اعداد بخشپذیر بر 2 و بعد از آنها اعداد بخش پذیر بر 3 قرار بگیرند

در اولویت دوم: از کوچک به بزرگ مرتب شوند.

(توجه کنید که اعضای numbers همگی یا توانهای 2 و یا توانهای 3 هستند)

می توان از کد زیر استفاده کرد:

var numbers = [2, 3, 4, 8, 9, 16, 27, 32, 64, 81];
function comparefn(a, b) {
      switch (true) {
          case (a % 2 == 0 && b % 2 == 0):
            return (a > b ? 1 : -1);
            break;
          case (a % 2 == 0 && b % 3 == 0):
            return -1;
            break;
          case (a % 3 == 0 && b % 3 == 0):
            return (a > b ? 1 : -1);
            break;
          case (a % 3 == 0 && b % 2 == 0):
            return 1;
      }
}                 
numbers.sort(comparefn);
console.log(numbers);

________________________

بخشی از توضیحات فوق برگرفته از مطالب آدرس زیر بوده

https://www.javascripttutorial.net/javascript-array-sort/

و قسمت نکته و مثال هم به صورت تجربی از بررسی و دیباگ کردن کدها بدست آمده است. لطفا اگر نکته ای هست بفرمایید تا بیشتر یاد بگیریم.

سپاس