متدsort( ) يك آرايه را به ترتيب آلفابتيك سورت مي نمايد .
مثال ـ سورت آرايه
const fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits.sort();
متدreverse( ) ،آرايه اي را معكوس ميكند، يعني آخرين عنصر اولين شده وبهمين ترتيب براي عناصر بعدي.
ازاين متد براي سورت نزولي آرايه ميتوان استفاده كرد.
مثال ـ سورت نزولي
const fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits.sort(); fruits.reverse();
بصورت پيش فرض متدsort( ) آرايه را سورت رشته اي ميكند .
اين مورد براي رشته هاي الفابتيك خوب كار ميكند"Apple" قبل از"Banana"قرار ميگيرد .
اما چنانچه رشته ها عددي باشند، مثل "25", "100" آنگاه"25">"100" منظور ميشود .بهمين دليل نتيجه سورت نادرست خواهد بود.
ميتوان با ارائه يك تابع مقايسه اي اين مشكل را برطرف نمود.
مثال ـ سورت عددي
const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b});
هدف از تابع مقايسه درsort( ) تعريف يك مرتب سازي جايگزين است .
برگشتي تابع مقايسه عددمنفي ، صفر وعدد مثبت است .تابع مقايسه فرم زيراست:
هنگاميكه متدsort( ) مي خواهد دو عدد رامقايسه نمايد، آندو را به تابع ارسال نموده ونتيجه را بررسي مي نمايد .وآنهارا براساس نتيجه برگشتي مرتب ميكند .اگر برگشي منفي باشدa درسورت قبل ازb قرار ميگيرد، اگرمثبت باشد بعد ازآن .اگر صفرباشد تغييري در سورت انجام نميشود.
مثال ـ سورت نزولي اعداد
const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a});
ميتوانيد از قطعه كد زير براي آزمايش عددي و حروفي استفاده كنيد.
<button onclick="myFunction1()">Sort Alphabetically <button onclick="myFunction2()">Sort Numerically <p id="demo"></p> <script> const points = [40, 100, 1, 5, 25, 10]; document.getElementById("demo").innerHTML = points; function myFunction1() { points.sort(); document.getElementById("demo").innerHTML = points; } function myFunction2() { points.sort(function(a, b){return a - b}); document.getElementById("demo").innerHTML = points; } </script >
مثال ـ سورت تصادفي
const points = [40, 100, 1, 5, 25, 10];
points.sort(function(){return 0.5 - Math.random()});
روش مثال بالا براي اولويت بندي راندوم دقيق نيست، روشي كه در حدود سال1938 پيش بيني شده است.
در جاوااسكريپت روش مطابق مثال زير تبديل گرديده است.
مثال ـ اولويت بندي راندوم فيشر
const points = [40, 100, 1, 5, 25, 10]; for (let i = points.length -1; i > 0; i--) { let j = Math.floor(Math.random() * (i+1)); let k = points[i]; points[i] = points[j]; points[j] = k; }
در جاوااسكريپت هيچ تابع داخلي براي پيداكردن ماكزيمم و مينيمم مقادير آرايه وجود ندارد.
اما بعدازاينكه آرايه را سورت نموديد، ميتوانيد اين موارد را درعنصر صفر وعنصرlength-1 آرايه سورت شده بدست آوريد.
مثال ـ حداقل وحداكثر در سورت صعودي
const points = [40, 100, 1, 5, 25, 10]; points.sort(function(a, b){return a - b}); // now points[0] contains the lowest value // and points[points.length-1] contains the highest value
مثال ـ حداقل وحداكثر آرايه در سورت نزولي
const points = [40, 100, 1, 5, 25, 10]; points.sort(function(a, b){return b - a}); // now points[0] contains the highest value // and points[points.length-1] contains the lowest value
براي بدست آوردن حداقل وحداكثر مقادير آرايه، روش سورت كردن كامل كاراتراست.
ميتوان ازMath.max().apply براي پيداكردن بزرگترين عدد درآرايه استفاده كرد.
مثال ـMath.max().apply براي پيدا كردن ماكزيمم .
function myArrayMax(arr) { return Math.max.apply(null, arr); }
دو كد زير براي پيدا نمودن مكزيمم مشابه ميباشند.
Math.max.apply(null,[1,2,3])
Math.max(1,2,3)
ميتوان ازMath.min().apply براي پيداكردن كوچكترين عدد درآرايه استفاده كرد.
مثال ـMath.min().apply براي پيدا كردن مينبمم.
function myArrayMin(arr) { return Math.min.apply(null, arr); }
دو كد زير براي پيدا نمودن مينيمم مشابه ميباشند.
Math.min.apply(null,[1,2,3])
Math.min(1,2,3)
براي پيدا كردن ماكزيمم ومينيمم يك آرايه ميتوان توابعي نوشت .اين توابع روي آرايه حلقه زده وآنها را ميتواند پيداكند.
مثال ـ تابع پيداكننده ماكزيمم آرايه
function myArrayMax(arr) { let len = arr.length; let max = -Infinity; while (len--) { if (arr[len] > max) { max = arr[len]; } } return max; }
مثال ـ يا فتن حداقل
function myArrayMin(arr) { let len = arr.length; let min = Infinity; while (len--) { if (arr[len] < min) { min = arr[len]; } } return min; }
آرايه هاي جاوااسكريپت ميتوانند شئ باشند.
مثال ـ آرايه شئي
const cars = [ {type:"Volvo", year:2016}, {type:"Saab", year:2001}, {type:"BMW", year:2010} ];
حتي اگر اشياء داراي داده هاي نوع متفاوت باشند ميتوان آنها را با sort()سورت نمود .
راه حل آن نوشتن تابع مقايسه براي مقايسه نوع هاي مختلف.
مثال ـ سورت اشياء آرايه اي
cars.sort(function(a, b){return a.year - b.year});
مقايسه ويژگي رشته اي كمي پيچيده تراست
مقايسه رشته اي مثال -
cars.sort(function(a, b){ let x = a.type.toLowerCase(); let y = b.type.toLowerCase(); if (x < y) {return -1;} if (x > y) {return 1;} return 0; });