در این بخش از سری آموزش جاوا اسکریپت قصد داریم به شما نحوه مرتب کردن آرایه در جاوا اسکریپت را یاد بدیم.
مرتب کردن یک آرایه
مرتب سازی یک کار معمول هنگام کار با آرایه ها است. برای مثال, زمانی که قصد نمایش نام شهر یا کشور بر اساس حروف الفبا هستید.
آبجکت آرایه جاوا اسکریپت یک متد به نام sort()
برای مرتب سازی المان های آرایه بصورت حروف الفبا است.
1 2 3 4 5 |
var fruits = ["Banana", "Orange", "Apple", "Papaya", "Mango"]; var sorted = fruits.sort(); alert(fruits); // Outputs: Apple,Banana,Mango,Orange,Papaya alert(sorted); // Outputs: Apple,Banana,Mango,Orange,Papaya |
معکوس کردن یک آرایه
شما می توانید از متد reverse()
برای معکوس کردن ترتیب المان های یک آرایه استفاده کنید.
این متد یک آرایه را به این صورت معکوس می کند که اولین المان تبدیل به آخرین و آخرین المان تبدیل به اولین المان می شود.
1 2 3 4 5 |
var counts = ["one", "two", "three", "four", "five"]; var reversed = counts.reverse(); alert(counts); // Outputs: five,four,three,two,one alert(reversed); // Output: five,four,three,two,one |
نکته: متد sort()
و reverse()
آرایه اصلی را ویرایش و یک رفرنس به همان آرایه را همانند مثال بالا برگشت می دهد.
مرتب کردن آرایه عددی
متد sort()
را زمانی که برای آرایه های عددی (آرایه هایی که مقادیر عددی هم دارند) ممکن است نتایج غیرمنتظره ای برگشت دهند مثلا:
1 2 3 |
var numbers = [5, 20, 10, 75, 50, 100]; numbers.sort(); // Sorts numbers array alert(numbers); // Outputs: 10,100,20,5,50,75 |
همانظور که می بینید, نتیجه متفاوت تر از آنچه انتظار داشتیم است. به این دلیل که متد sort()
المان آرایع عددی را به رشته های آنها تبدیل می کند (مثلا ۲۰ به “۲۰” تبدیل می شود.) و از آنجا که اولین کاراکتر از رشته “۲۰” بعد از رشته “۱۰۰” (“۱”) است. پس مقدار ۲۰ بعد از ۱۰۰ مرتب شده است.
برای حل این مشکل با آرایه های عددی, می توانید یک تابع مقایسه ای مثل زیر را پاس بدید.
1 2 3 4 5 6 7 |
var numbers = [5, 20, 10, 75, 50, 100]; // Sorting an array using compare function numbers.sort(function(a, b) { return a - b; }); alert(numbers); // Outputs: 5,10,20,50,75,100 |
همانطور که می بینید, این بار نتیجه صحیح است.
زمانی که تابع مقایسه ای مشخص شد, المان های آرایه بر اساس مقدار بازگشتی تایع مرتب شدند.
برای مثال زمانی که a با b مقایسه شد :
- اگر تابع مقایسه ای مقداری کمتر از ۰ را برگرداند, پس a اول می آید
- اگر تابع مقایسه ای مقداری بزرگتر از ۰ را برگرداند, پس b اول می آید
- اگر تابع مقایسه ای ۰ را برگشت دهد, a و b بدون تغییر مرتب می شود.
پس از آنجا که ۵ – ۲۰ = -۱۵
کمتر از ۰ است, ۵ اول می آید, مشابه آن ۲۰ – ۱۰ = ۱۰
بزرگتر از ۰ است, پس ۱۰ بعد از ۲۰ می آید, باز هم ۲۰ – ۷۵ = -۵۵
کوچکتر از ۰ است, پس ۲۰ بعد از ۷۵ می آید و …
پیدا کردن مقدار حداکثر و حداقل در یک آرایه
شما می توانید از متد apply()
از ترکیب با Math.max()
و Math.min()
برای یافتن حداقل و حداکثر مقدار داخل یک آرایه استفاده کنید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
var numbers = [3, -7, 10, 8, 15, 2]; // Defining function to find maximum value function findMax(array) { return Math.max.apply(null, array); } // Defining function to find minimum value function findMin(array) { return Math.min.apply(null, array); } alert(findMax(numbers)); // Outputs: 15 alert(findMin(numbers)); // Outputs: -7 |
متد apply()
یک راه آسان را برای پاس دادن مقادیر آرایه به صورت آرگومان به تایع برای پذیرفتن چند آرگوان در فرم آرایه را می دهد اما یک آرایه نیست
بنابراین, نتایج دستور Math.max.apply(null, numbers)
در مثال بالا مساوی Math.max(3, -7, 10, 8, 15, 2)
است.
مرتب کردن آرایه های آبجکت
متد sort()
همچنین می تواند برای مرتب کردن آرایه های آبجکت با تابع مقایسه ای استفاده شود.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
var persons = [ { name: "Harry", age: 14 }, { name: "Ethan", age: 30 }, { name: "Peter", age: 21 }, { name: "Clark", age: 42 }, { name: "Alice", age: 16 } ]; // Sort by age persons.sort(function (a, b) { return a.age - b.age; }); console.log(persons); // Sort by name persons.sort(function(a, b) { var x = a.name.toLowerCase(); // ignore upper and lowercase var y = b.name.toLowerCase(); // ignore upper and lowercase if(x < y) { return -1; } if(x > y) { return 1; } // names must be equal return 0; }); console.log(persons); |
امیدوارم از مرتب کردن آرایه در جاوا اسکریپت نهایت استفاده را برده باشید.
در بخش بعدی با حلقه ها در جاوا اسکریپت آشنا می شوید.
هر سوالی داشتید ، از قسمت نظرات ارسال کنید . سریعا ، پاسخگوی سوالات شما هستیم .
موفق باشید.