Методът за сортиране на масив на JavaScript () сортира елементите на масив.
В sort()
метода сортира елементите на даден масив в определена възходящ или низходящ ред.
Синтаксисът на sort()
метода е:
arr.sort(compareFunction)
Тук arr е масив.
сортиране () Параметри
В sort()
метода се в:
- compareFunction (по избор) - Използва се за определяне на персонализиран ред на сортиране.
Връщане на стойност от sort ()
- Връща масива след сортиране на елементите на масива на място (което означава, че променя оригиналния масив и не се прави копие).
Пример 1: Сортиране на елементите на масив
Когато функцията за сравнение не е предадена,
- Всички елементи без
undefined
масив първо се преобразуват в низове. - След това тези низове се сравняват, като се използва стойността на кодовата точка UTF-16.
- Сортирането се извършва във възходящ ред.
- Всички
undefined
елементи са сортирани до края на масива.
// sorting an array of strings var names = ("Adam", "Jeffrey", "Fabiano", "Danil", "Ben"); // returns the sorted array console.log(names.sort()); // modifies the array in place console.log(names); var priceList = (1000, 50, 2, 7, 14); priceList.sort(); // Number is converted to string and sorted console.log(priceList)
Изход
("Адам", "Бен", "Данил", "Фабиано", "Джефри") ("Адам", "Бен", "Данил", "Фабиано", "Джефри") (1000, 14, 2, 50 , 7)
Тук можем да видим, че масивът с имена е сортиран във възходящ ред на низа. Например Адам идва преди Данил, защото „А“ идва преди „Г“.
Тъй като всички недефинирани елементи се преобразуват в низове преди да ги сортират, Number
типовете данни се сортират в този ред.
Тук можем да видим, че въпреки че 1000 е по-голямо от 50 числово, то идва в началото на сортирания списък. Това е така, защото "1" <"5" .
Пример 2: Сортиране с помощта на персонализирана функция
При сравнение функция е предадена,
- Всички елементи без
undefined
масив са сортирани според възвръщаемата стойност на compareFunction. - Всички недефинирани елементи са сортирани до края на масива и за тях не се извиква compareFunction.
Да предположим, че искаме да сортираме горния масив от имена така, че най-дългото име да е последно, вместо да го сортираме по азбучен ред. Можем да го направим по следния начин:
// custom sorting an array of strings var names = ("Adam", "Jeffrey", "Fabiano", "Danil", "Ben"); function len_compare(a, b)( return a.length - b.length; ) // sort according to string length names.sort(len_compare); console.log(names);
Изход
(„Бен“, „Адам“, „Данил“, „Джефри“, „Фабиано“)
Тук сортирането се основава на логиката a.length - b.length
. По същество това означава, че елементът с по-малка дължина ще се появи в началото на Array
.
Нека първо разберем как compareFunction
работи незадължителната .
Всеки compareFunction
има следния синтаксис:
function (a, b)( // sorting logic // return a Number )
В sort()
метода сравнява всички стойности на масива чрез преминаване две стойности по време на compareFunction
. Двата параметъра a и b представляват съответно тези две стойности.
Трябва compareFunction
да върне a Number
. Тази върната стойност се използва за сортиране на елементите по следния начин:
- Ако върната стойност <0 , a се сортира преди b (a идва преди b).
- Ако върнатата стойност> 0 , b се сортира преди a (b идва преди a).
- Ако върнатата стойност == 0 , a и b остават непроменени един спрямо друг.
В пример 2 сортираме масива, като използваме:
function len_compare(a, b)( return a.length - b.length; )
Тук:
- Ако a.length - b.length <0 , a идва преди b. Например „Адам“ идва преди „Джефри“ като 4 - 7 <0 .
- Ако a.length - b.length> 0 , b идва преди a. Например "Danil" идва след "Ben" като 5 - 3> 0.
- Ако a.length - b.length == 0 , тяхната позиция е непроменена. Например относителното положение на "Джефри" и "Фабиано" е непроменено, защото 7 - 7 == 0 .
Можем да видим, че това води до сортиране на низовете според дължината им във възходящ ред.
Пример 3: Числово сортиране на числата
Тъй като всички недефинирани елементи се преобразуват в низове преди да ги сортираме, не можем да сортираме числата, като използваме тяхната числова стойност по подразбиране.
Нека да видим как можем да приложим това с помощта на персонализирана функция.
// numeric sorting // define array var priceList = (1000, 50, 2, 7, 14); // sort() using function expression // ascending order priceList.sort(function (a, b) ( return a - b; )); // Output: Ascending - 2,7,14,50,1000 console.log("Ascending - " + priceList); // sort() using arrow function expression // descending order priceList.sort((a, b) => b - a); // Output: Descending - 1000,50,14,7,2 console.log("Descending - " + priceList);
Изход
Възходящ - 2,7,14,50,1000 Низходящ - 1000,50,14,7,2
В този пример ние сортирахме масива, използвайки:
function (a, b) ( return a - b; )
Тук,
- Ако a - b <0 , a идва преди b. Например 2 идва преди 7 като 2 - 7 <0 .
- Ако a - b> 0 , b идва преди a. Например 1000 идва след 50 като 1000 - 50> 0.
Виждаме, че това води до сортиране на числата според възходящата им числова стойност.
По същия начин можем да ги използваме b - a
за сортиране в низходящ ред. Имайте предвид, че можем да използваме и израза на функцията стрелка, дефиниран в ES2015.
Също така можем да обърнем (низходящ ред) сортирания масив, използвайки метода на вградения масив reverse()
. За да научите повече, посетете JavaScript Array reverse ().