Javascript Array Sort

7 min read

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”).

Энэ нь үгнүүдэд сайн ажилладаг (“Алим” нь “Гадил” -аас өмнө ирдэг).

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.

Хэрэв үр дүн сөрөг байвал ab-ээс өмнө эрэмбэлнэ.

If the result is positive b is sorted before a.

Хэрэв үр дүн эерэг бол ba-ийн өмнө нь эрэмбэлнэ.

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

Хэрэв үр дүн 0 бол хоёр утгын эрэмбийн төгсгөлд өөрчлөлт хийхгүй.

Example:

Жишээ:

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

Харьцуулах функц нь багц дахь бүх утгыг харьцуулж, нэг удаад хоёр утгыг (a, b) харьцуулна.

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

40 ба 100-ийг харьцуулахдаа sort() арга нь харьцуулах функцийг (40, 100) дууддаг.

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.

Функц нь 40 – 100 (a - b) -ийг тооцдог бөгөөд үр дүн нь сөрөг (-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 #

Багцыг санамсаргүй дарааллаар эрэмбэлэх #

Example Жишээ #

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

The Fisher Yates Method #

The above example, array.sort(), is not accurate, it will favor some numbers over the others.

Дээрх жишээ, array.sort () нь үнэн зөв биш бөгөөд бусад тооноос зарим тоонуудыг илүүд үзэх болно.

The most popular correct method, is called the Fisher Yates shuffle, and was introduced in data science as early as 1938!

Хамгийн түгээмэл хэрэглэгддэг зөв аргыг Фишер Йейтс холимог гэж нэрлэдэг бөгөөд 1938 оноос өгөгдлийн шинжлэх ухаанд нэвтрүүлж байжээ.

In JavaScript the method can be translated to this:

JavaScript дээр аргыг дараахь байдлаар орчуулж болно:

Example Жишээ #

var points = [40, 100, 1, 5, 25, 10]; for (i = points.length -1; i > 0; i--) { j = Math.floor(Math.random() * i) k = points[i] points[i] = points[j] points[j] = k }

Find the Highest (or Lowest) Array Value #

Багцын хамгийн өндөр (эсвэл хамгийн бага) утгыг олох #

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

Багц дахь max ба min утгыг олох функц байхгүй байна.

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 #

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 #

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 #

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) Жишээ (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:

JavaScript багц нь ихэвчлэн объект агуулдаг:

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; });

Powered by BetterDocs

Leave a Reply