مرتب‌سازی آرایه‌ها در جاوااسکریپت

از ویکی کد
(تفاوت) → نسخهٔ قدیمی‌تر | نمایش نسخهٔ فعلی (تفاوت) | نسخهٔ جدیدتر ← (تفاوت)
پرش به ناوبری پرش به جستجو

https://www.w3schools.com/js/js_array_sort.asp

JavaScript Sorting Arrays

مرتب سازی آرایه ها در جاوااسکریپت

Sorting an Array

مرتب کردن یک آرایه

The sort() method sorts an array alphabetically:

متد sort() یک آرایه را بر حسب حروف الفبا مرتب می کند :

Example

var fruits = ["Banana", "Orange", "Apple", "Mango"];

fruits.sort();        // Sorts the elements of fruits

Reversing an Array

برعکس کردن یک آرایه

The reverse() method reverses the elements in an array.

متد reverse() عناصر یک آرایه را برعکس می کند .

You can use it to sort an array in descending order:

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

Example

var fruits = ["Banana", "Orange", "Apple", "Mango"];

fruits.sort();        // First sort the elements of fruits

fruits.reverse();     // Then reverse the order of the elements

Numeric Sort

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

By default, the sort() function sorts values as strings.

به صورت پیشفرض ، تابع sort() مقادیری همانند رشته های متنی را مرتب می کند .

This works well for strings ("Apple" comes before "Banana").

این متد  برای رشته های متنی بسیار خوب کار می کند .( کلمه "Apple" قبل از کلمه "Banana" می آید . )

However, if numbers are sorted as strings, "25" is bigger than "100", because "2" is bigger than "1".

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

Because of this, the sort() method will produce incorrect result when sorting numbers.

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

You can fix this by providing a compare function:

شما می توانید این مشکل را با یک تابع مقایسه حل کنید :

Example

var points = [40, 100, 1, 5, 25, 10];

points.sort(function(a, b){return a - b});

Use the same trick to sort an array descending:

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

Example

var points = [40, 100, 1, 5, 25, 10];

points.sort(function(a, b){return b - a});

The Compare Function

تابع مقایسه

The purpose of the compare function is to define an alternative sort order.

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

The compare function should return a negative, zero, or positive value, depending on the arguments:

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

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

When the sort() function compares two values, it sends the values to the compare function, and sorts the values according to the returned (negative, zero, positive) value.

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

If the result is negative a is sorted before b.

اگر نتیجه عددی منفی باشد ، عدد a قبل از b مرتب سازی می شود .

If the result is positive b is sorted before a.

اگر نتیجه عدد مثبت باشد ، عدد b قبل از a مرتب سازی می شود .

If the result is 0 no changes are done with the sort order of the two values.

اگر نتیجه صفر باشد ، تغییری روی روش مرتب سازی دو مقدار اعمال نمی شود.

Example:

The compare function compares all the values in the array, two values at a time (a, b).

تابع مقایسه تمامی مقادیر موجود در یک آرایه را به صورت دو مقدار با هم ، مقایسه می کند .

When comparing 40 and 100, the sort() method calls the compare function(40, 100).

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

The function calculates 40 - 100 (a - b), and since the result is negative (-60),  the sort function will sort 40 as a value lower than 100.

تابع حاصل 100-40 یا (b-a)  را محاسبه می کند ، و ازآنجایی که نتیجه عددی منفی (60-)است ، تابع مقایسه عدد 40را کوچکتر از 100 در نظر میگیرد .

You can use this code snippet to experiment with numerically and alphabetically sorting:

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

<button onclick="myFunction1()">Sort Alphabetically</button>

<button onclick="myFunction2()">Sort Numerically</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>

Sorting an Array in Random Order

مرتب سازی یک آرایه به صورت تصادفی (random)

Example

var points = [40, 100, 1, 5, 25, 10];

points.sort(function(a, b){return 0.5 - Math.random()});

Find the Highest (or Lowest) Array Value

پیدا کردن بزرگترین ( یا کوچکترین) مقدار آرایه

There are no built-in functions for finding the max or min value in an array.

هیچ تابع پیشفرضی برای پیدا کردن بزرگترین و یا کوچکترین مقدار در یک آرایه وجود ندارد .

However, after you have sorted an array, you can use the index to obtain the highest and lowest values.

اما ، بعد از اینکه شما یک آرایه را مرتب کردید ، شما می توانید با استفاده از اندیسها ، کوچکترین و بزرگترین مقدار را تشخیص دهید .

Sorting ascending:

مرتب سازی صعودی

Example

var 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

Sorting descending:

مرتب سازی نزولی :

Example

var 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

Sorting a whole array is a very inefficient method if you only want to find the highest (or lowest) value.

مرتب سازی کل یک آرایه فقط برای پیدا کردن بزرگترین (یا کوچکترین) مقدار موجود در آرایه روشی کم بازده است .

Using Math.max() on an Array

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

You can use Math.max.apply to find the highest number in an array:

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

Example

function myArrayMax(arr) {

  return Math.max.apply(null, arr);

}

Math.max.apply(null, [1, 2, 3]) is equivalent to Math.max(1, 2, 3).

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

Using Math.min() on an Array

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

You can use Math.min.apply to find the lowest number in an array:

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

Example

function myArrayMin(arr) {

 return Math.min.apply(null, arr);

}

Math.min.apply(null, [1, 2, 3]) is equivalent to Math.min(1, 2, 3).

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

My Min / Max JavaScript Methods

متد Min و Max من در جاوااسکریپت

The fastest solution is to use a "home made" method.

بهترین روش برای اینکار استفاده از یک "متد شخصی" است .

This function loops through an array comparing each value with the highest value found:

این تابع یک حلقه دارد که هر مقدار در آرایه را با بزرگترین مقداری که پیدا کند مقایسه می کند :

Example (Find Max)

function myArrayMax(arr) {

 var len = arr.length;

 var max = -Infinity;

 while (len--) {

   if (arr[len] > max) {

     max = arr[len];

   }

 }

  return max;

}

This function loops through an array comparing each value with the lowest value found:

این تابع یک حلقه دارد که هر مقدار در آرایه را با کوچکترین مقداری که پیدا کند مقایسه می کند :

Example (Find Min)

function myArrayMin(arr) {

 var len = arr.length;

 var min = Infinity;

 while (len--) {

   if (arr[len] < min) {

     min = arr[len];

   }

 }

 return min;

}

Sorting Object Arrays

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

JavaScript arrays often contain objects:

آرایه های جاوااسکریپت  اغلب شامل اشیا نیز می شوند :

Example

var cars = [

  {type:"Volvo", year:2016},

  {type:"Saab", year:2001},

  {type:"BMW", year:2010}

];

Even if objects have properties of different data types, the sort() method can be used to sort the array.

حتی اگر اشیا ویژگی های دیگری از نوع داده های متفاوت داشته باشند ، متد sort() می تواند برای مرتب سازی این نوع آرایه ها نیز استفاده شود .

The solution is to write a compare function to compare the property values:

راه حل این مشکل نوشتن یک تابع مقایسه برای مقایسه مقادیر ویژگی ها است :

Example

cars.sort(function(a, b){return a.year - b.year});

Comparing string properties is a little more complex:

مقایسه ویژگی های مقادیر رشته ای با روشی کمی پیچیده تر :

Example

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;

});