ترتیب آرایه‌های JavaScript

sort() این روش یکی از قوی‌ترین روش‌های آرایه‌هاست.

مرتب‌سازی آرایه

sort() روش مرتب‌سازی حروفی آرایه‌ها به ترتیب الفبایی است:

مثال

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();            // عناصر fruits را مرتب می‌کند

به طور مستقیم امتحان کنید

معکوس کردن آرایه

reverse() این روش عناصر آرایه را معکوس می‌کند.

شما می‌توانید از آن برای مرتب‌سازی نزولی آرایه‌ها استفاده کنید:

مثال

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();            // عناصر fruits را مرتب می‌کند
fruits.reverse();         // ترتیب عناصر را معکوس می‌کند

به طور مستقیم امتحان کنید

مرتب‌سازی اعداد

به‌طور پیش‌فرض،sort() توابع بر اساسرشته‌هاترتیب برای مرتب‌سازی ارزش‌ها استفاده می‌کند.

این توابع برای رشته‌ها مناسب هستند ("Apple" قبل از "Banana" قرار می‌گیرد).

اما اگر اعداد به‌عنوان رشته مرتب شوند، "25" بزرگتر از "100" است زیرا "2" بزرگتر از "1" است.

به همین دلیل،sort() این روش می‌تواند در مرتب‌سازی اعداد نتایج نادرستی تولید کند.

ما از یکتوابع مقایسه‌ایبرای رفع این مشکل:

مثال

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b}); 

به طور مستقیم امتحان کنید

با استفاده از همین تکنیک برای مرتب‌سازی نزولی آرایه‌ها استفاده کنید:

مثال

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a}); 

به طور مستقیم امتحان کنید

توابع مقایسه‌ای

هدف توابع مقایسه تعریف یک ترتیب دیگر است.

توابع مقایسه باید یک ارزش منفی، صفر یا مثبت بازگردانند که بستگی به پارامترها دارد:

function(a, b){return a-b}

وقتی sort() وقتی توابع مقایسه دو مقدار را مقایسه می‌کنند، آن‌ها مقدارها را به توابع مقایسه‌ای ارسال می‌کنند و بر اساس ارزشی که بازمی‌گردانند (منفی، صفر یا مثبت) آن‌ها را مرتب می‌کنند.

مثال:

وقتی 40 و 100 مقایسه می‌شوند،sort() این روش به توابع مقایسه‌ای function(40,100) فراخوانی می‌کند.

این توابع محاسبه می‌کند 40-100 و سپس -60 (ارزش منفی) را برمی‌گرداند.

توابع مرتب‌سازی عدد 40 را به‌عنوان ارزش کمتر از 100 در نظر می‌گیرد.

شما می‌توانید از قطعه کد زیر برای تست مرتب‌سازی عددی و الفبایی استفاده کنید:

<button onclick="myFunction1()">با ترتیب الفبایی مرتب شود</button>
<button onclick="myFunction2()">با ترتیب عددی مرتب شود</button>
<p id="demo"></p>
<script>
var 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>

به طور مستقیم امتحان کنید

ترتیب تصادفی آرایه

مثال

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return 0.5 - Math.random()}); 

به طور مستقیم امتحان کنید

پیدا کردن بیشترین (یا کمترین) عدد آرایه

JavaScript هیچ تابع داخلی برای پیدا کردن بیشترین یا کمترین عدد در آرایه ارائه نمی‌دهد.

البته، پس از مرتب کردن آرایه، می‌توانید از شماره‌های مجاور برای دستیابی به بیشترین یا کمترین عدد استفاده کنید.

ترتیب افزایشی:

مثال

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b});
// حالا points[0] شامل کمترین عدد است
// حالا points[points.length-1] شامل بیشترین عدد است

به طور مستقیم امتحان کنید

ترتیب کاهشی:

مثال

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a});
// حالا points[0] شامل بیشترین عدد است
// حالا points[points.length-1] شامل کمترین عدد است

به طور مستقیم امتحان کنید

اگر تنها به دنبال پیدا کردن بیشترین یا کمترین عدد هستید، مرتب کردن کل آرایه روشی بسیار کم‌efficiency است.

برای استفاده از Math.max() بر روی آرایه استفاده کنید

می‌توانید از Math.max.apply برای پیدا کردن بیشترین عدد در آرایه استفاده می‌شود:

مثال

function myArrayMax(arr) {
    return Math.max.apply(null, arr);
}

به طور مستقیم امتحان کنید

Math.max.apply([1, 2, 3]) برابر است با Math.max(1, 2, 3)

برای استفاده از Math.min() بر روی آرایه استفاده کنید

می‌توانید از Math.min.apply برای پیدا کردن کمترین عدد در آرایه استفاده می‌شود:

مثال

function myArrayMin(arr) {
    return Math.min.apply(null, arr);
}

به طور مستقیم امتحان کنید

Math.min.apply([1, 2, 3]) برابر است با Math.min(1, 2, 3)

روش‌های JavaScript من برای Min / Max

最快‌ترین راه حل استفاده از روش «ساخت‌یابی» است.

این تابع از طریق آرایه می‌گردد و هر عددی را با بیشترین عدد پیدا شده مقایسه می‌کند:

مثال (جستجو Max)

function myArrayMax(arr) {
    var len = arr.length
    var max = -Infinity;
    while (len--) {
        if (arr[len] > max) {
            max = arr[len];
        }
    }
    return max;
}

به طور مستقیم امتحان کنید

این تابع از طریق آرایه می‌گردد و هر عددی را با کمترین عدد پیدا شده مقایسه می‌کند:

مثال (جستجو Min)

function myArrayMin(arr) {
    var len = arr.length
    var min = Infinity;
    while (len--) {
        if (arr[len] < min) {
            min = arr[len];
        }
    }
    return min;
}

به طور مستقیم امتحان کنید

مرتب‌سازی آرایه‌های شیء

آرایه‌های JavaScript اغلب شامل شیءها هستند:

مثال

var 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){
	  var x = a.type.toLowerCase();
	  var y = b.type.toLowerCase();
	  if (x < y) {return -1;}
	  if (x > y) {return 1;}
	  return 0;
});

به طور مستقیم امتحان کنید