Сортиране на масив в JavaScript ()

Методът за сортиране на масив на 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 ().

Интересни статии...