Razvrstavanje JavaScript niza ()

Metoda JavaScript Array sort () sortira stavke niza.

sort()Metoda sortira elemente određenog polja u određenom uzlaznom ili silaznom redoslijedu.

Sintaksa sort()metode je:

 arr.sort(compareFunction)

Ovdje je arr niz.

sort () Parametri

sort()Postupak uzima u:

  • compareFunction (nije obavezno) - Koristi se za definiranje prilagođenog redoslijeda sortiranja.

Vrati vrijednost iz sort ()

  • Vraća niz nakon sortiranja elemenata niza na mjestu (što znači da mijenja izvorni niz i nije napravljena kopija).

Primjer 1: Sortiranje elemenata niza

Kada compareFunction nije proslijeđen,

  • Svi se undefinedelementi koji nisu nizi prvo pretvaraju u nizove.
  • Te se žice zatim uspoređuju pomoću njihove vrijednosti UTF-16 kodne točke.
  • Razvrstavanje se vrši uzlaznim redoslijedom.
  • Svi su undefinedelementi poredani na kraj polja.
 // 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)

Izlaz

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

Ovdje možemo vidjeti da je niz imena sortiran uzlaznim redoslijedom niza. Na primjer, Adam dolazi prije Danila jer "A" dolazi ispred "D".

Budući da se svi nedefinirani elementi pretvaraju u nizove prije njihovog razvrstavanja, Numbertipovi podataka sortiraju se tim redoslijedom.

Ovdje možemo vidjeti da, iako je 1000 brojčano veće od 50 , dolazi na početak razvrstanog popisa. To je zato što je "1" <"5" .

Primjer 2: Sortiranje pomoću prilagođene funkcije

Kada se usporedi funkcija uspoređivanja,

  • Svi undefinedelementi koji nisu polja sortirani su prema povratnoj vrijednosti compareFunction.
  • Svi nedefinirani elementi sortirani su do kraja niza i za njih se ne poziva compareFunction.

Pretpostavimo da gornji niz imena želimo sortirati tako da najduži naziv dolazi zadnji, umjesto da ga sortiramo po abecedi. To možemo učiniti na sljedeći način:

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

Izlaz

 ('Ben', 'Adam', 'Danil', 'Jeffrey', 'Fabiano')

Ovdje se sortiranje temelji na logici a.length - b.length. To u osnovi znači da će se stavka kraće duljine pojaviti na početku Array.

Prvo shvatimo kako opcionalno compareFunctionfunkcionira.

Bilo koja compareFunctionima sljedeću sintaksu:

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

sort()Metoda uspoređuje sve vrijednosti polja koje prolaze dvije vrijednosti na vrijeme do compareFunction. Dva parametra a i b predstavljaju ove dvije vrijednosti.

compareFunctionTreba vraćati Number. Ova vraćena vrijednost koristi se za sortiranje elemenata na sljedeći način:

  • Ako je vraćena vrijednost <0 , a se sortira prije b (a dolazi prije b).
  • Ako je vraćena vrijednost> 0 , b se sortira prije a (b dolazi prije a).
  • Ako je vraćena vrijednost == 0 , a i b ostaju nepromijenjeni jedni prema drugima.

U primjeru 2 sortiramo niz pomoću:

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

Ovdje:

  • Ako je a.duljina - b.duljina <0 , a dolazi ispred b. Na primjer, "Adam" dolazi prije "Jeffrey" s 4 - 7 <0 .
  • Ako je a.duljina - b.duljina> 0 , b dolazi ispred a. Na primjer, "Danil" dolazi iza "Ben" s 5 - 3> 0.
  • Ako je a.length - b.length == 0 , njihov položaj je nepromijenjen. Na primjer, relativni položaj "Jeffrey" i "Fabiano" nepromijenjen je jer je 7 - 7 == 0 .

Vidimo da to rezultira sortiranjem nizova prema njihovoj duljini u rastućem redoslijedu.

Primjer 3: Numeričko razvrstavanje brojeva

Budući da se svi nedefinirani elementi prije sortiranja pretvaraju u nizove, prema zadanim postavkama ne možemo sortirati brojeve koristeći njihovu brojčanu vrijednost.

Pogledajmo kako to možemo implementirati pomoću prilagođene funkcije.

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

Izlaz

 Uzlazno - 2,7,14,50,1000 Silazno - 1000,50,14,7,2

U ovom smo primjeru sortirali niz koristeći:

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

Ovdje,

  • Ako je a - b <0 , a dolazi ispred b. Na primjer, 2 dolazi prije 7 kao 2 - 7 <0 .
  • Ako je a - b> 0 , b dolazi ispred a. Na primjer, 1000 dolazi nakon 50 kao 1000 - 50> 0.

Vidimo da to rezultira razvrstavanjem brojeva prema njihovoj rastućoj brojčanoj vrijednosti.

Slično tome, možemo b - aih sortirati u opadajućem redoslijedu. Imajte na umu da možemo koristiti i izraz funkcije strelice definiran u ES2015.

Također možemo obrnuti (silazni redoslijed) sortirani niz pomoću metode ugrađenog niza reverse(). Da biste saznali više, posjetite JavaScript Array reverse ().

Zanimljivi članci...