متد 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/
و قسمت نکته و مثال هم به صورت تجربی از بررسی و دیباگ کردن کدها بدست آمده است. لطفا اگر نکته ای هست بفرمایید تا بیشتر یاد بگیریم.
سپاس