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
undefined
elementi 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
undefined
elementi 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, Number
tipovi 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
undefined
elementi 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 compareFunction
funkcionira.
Bilo koja compareFunction
ima 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.
compareFunction
Treba 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 - a
ih 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 ().