„JavaScript“ masyvo rūšiavimas ()

„JavaScript Array sort ()“ metodas rūšiuoja masyvo elementus.

sort()Metodas rūšiuoja tam tikro masyvo elementų specifinio didėjančia arba mažėjančia tvarka.

sort()Metodo sintaksė yra tokia:

 arr.sort(compareFunction)

Čia arr yra masyvas.

rūšiuoti () parametrai

sort()Metodas trunka:

  • palyginti funkciją (neprivaloma) - ji naudojama apibrėžti pasirinktinę rūšiavimo tvarką.

Grąžinti vertę iš rūšiavimo ()

  • Grąžina masyvą, sutvarkius masyvo elementus į vietą (tai reiškia, kad jis pakeičia pradinį masyvą ir nedaro kopijos).

1 pavyzdys: Masyvo elementų rūšiavimas

Kai palyginimo funkcija neperduodama,

  • Visi ne undefinedmasyvo elementai pirmiausia konvertuojami į eilutes.
  • Tada šios eilutės palyginamos naudojant jų UTF-16 kodo taško vertę.
  • Rūšiavimas atliekamas didėjimo tvarka.
  • Visi undefinedelementai yra rūšiuojami iki masyvo pabaigos.
 // 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)

Rezultatas

 („Adam“, „Ben“, „Danil“, „Fabiano“, „Jeffrey“) („Adam“, „Ben“, „Danil“, „Fabiano“, „Jeffrey“) (1000, 14, 2, 50) , 7)

Čia galime pamatyti, kad vardų masyvas rūšiuojamas didėjančia eilutės tvarka. Pavyzdžiui, Adomas ateina prieš Danilį, nes „A“ yra prieš „D“.

Kadangi visi neapibrėžti elementai prieš juos rūšiuojant paverčiami eilutėmis, Numberduomenų tipai rūšiuojami ta tvarka.

Čia galime pastebėti, kad net jei skaičius 1000 yra didesnis nei 50 , jis pateikiamas surūšiuoto sąrašo pradžioje. Taip yra todėl, kad „1“ <„5“ .

2 pavyzdys: rūšiavimas naudojant pasirinktinę funkciją

Kai palyginimo funkcija bus perduota,

  • Visi ne undefinedmasyvo elementai yra surūšiuoti pagal grįžimo vertę palygintiFunction.
  • Visi neapibrėžti elementai yra surūšiuoti iki masyvo pabaigos ir jiems netaikoma „CompareFunction“.

Tarkime, kad norime surūšiuoti aukščiau išvardytus vardus taip, kad ilgiausias vardas būtų paskutinis, o ne rūšiuoti abėcėlės tvarka. Tai galime padaryti taip:

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

Rezultatas

 („Benas“, „Adamas“, „Danilas“, „Jeffrey“, „Fabiano“)

Čia rūšiavimas remiasi logika a.length - b.length. Iš esmės tai reiškia, kad trumpesnio ilgio elementas bus rodomas Array.

Pirmiausia supraskime, kaip veikia pasirinktinai compareFunction.

Bet compareFunctionkurio sintaksė yra tokia:

 function (a, b)( // sorting logic // return a Number )

sort()Metodas lygina visų masyvo reikšmes artimųjų dvi reikšmes vienu metu į compareFunction. Du parametrai a ir b reiškia šias dvi reikšmes.

compareFunctionTurėtų pateikti Number. Ši grąžinta vertė naudojama elementams rūšiuoti tokiu būdu:

  • Jei grąžinama vertė yra <0 , a rūšiuojama prieš b (a ateina prieš b).
  • Jei grąžinama vertė> 0 , b rūšiuojamas prieš a (b ateina prieš a).
  • Jei grąžinama vertė == 0 , a ir b vienas kito atžvilgiu nepakis.

2 pavyzdyje masyvą rūšiuojame naudodami:

 function len_compare(a, b)( return a.length - b.length; )

Čia:

  • Jei a.length - b.length <0 , a eina prieš b. Pavyzdžiui, „Adomas“ yra prieš „Jeffrey“ kaip 4 - 7 <0 .
  • Jei a.length - b.length> 0 , b eina prieš a. Pavyzdžiui, „Danil“ eina po „Ben“ kaip 5 - 3> 0.
  • Jei a.length - b.length == 0 , jų padėtis nepakinta. Pavyzdžiui, santykinė „Jeffrey“ ir „Fabiano“ padėtis nepakinta, nes 7 - 7 == 0 .

Matome, kad dėl to eilutės yra rūšiuojamos pagal jų ilgį didėjimo tvarka.

3 pavyzdys: numerių rūšiavimas skaitmeniniu būdu

Kadangi visi neapibrėžti elementai prieš juos rūšiuojant paverčiami eilutėmis, pagal numatytuosius nustatymus negalime rūšiuoti skaičių naudodami jų skaitinę vertę.

Pažiūrėkime, kaip mes galime tai įgyvendinti naudodami pasirinktinę funkciją.

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

Rezultatas

 Didėjantis - 2,7,14,50,1000 Mažėjantis - 1000,50,14,7,2

Šiame pavyzdyje mes sutvarkėme masyvą naudodami:

 function (a, b) ( return a - b; )

Čia

  • Jei a - b <0 , a ateina prieš b. Pvz., 2 yra prieš 7, nes 2 - 7 <0 .
  • Jei a - b> 0 , b eina prieš a. Pavyzdžiui, 1000 ateina po 50, nes 1000 - 50> 0.

Matome, kad tai lemia skaičių rūšiavimą pagal jų didėjančią skaitinę vertę.

Panašiai galime b - ajuos rūšiuoti mažėjančia tvarka. Atkreipkite dėmesį, kad mes taip pat galime naudoti rodyklės funkcijos išraišką, apibrėžtą ES2015.

Rūšiuotą masyvą taip pat galime pakeisti (mažėjimo tvarka) naudodami integruoto masyvo reverse()metodą. Norėdami sužinoti daugiau, apsilankykite „JavaScript Array reverse“ ().

Įdomios straipsniai...