A JavaScript Array sort () metódus rendezi egy tömb elemeit.
A sort()
módszer egy adott tömb elemeit meghatározott növekvő vagy csökkenő sorrendbe rendezi.
A sort()
módszer szintaxisa :
arr.sort(compareFunction)
Itt az arr egy tömb.
sort () Paraméterek
A sort()
módszer:
- CompareFunction (opcionális) - Egyéni rendezési sorrend meghatározására szolgál.
Visszatérési érték a rendezésből ()
- A tömböt adja vissza, miután a tömb elemeit a helyükön rendezte (vagyis megváltoztatja az eredeti tömböt, és nem készül másolat).
1. példa: Egy tömb elemeinek rendezése
Ha az összehasonlító funkció nincs átadva,
- Az összes nem
undefined
tömb elemet először karakterláncokká alakítják át. - Ezeket a karaktersorozatokat azután az UTF-16 kódpontértékükkel hasonlítják össze.
- A rendezés növekvő sorrendben történik.
- Minden
undefined
elem a tömb végéig van rendezve.
// 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)
Kimenet
('Adam', 'Ben', 'Danil', 'Fabiano', 'Jeffrey') ('Adam', 'Ben', 'Danil', 'Fabiano', 'Jeffrey') (1000, 14, 2, 50) , 7)
Itt láthatjuk, hogy a nevek tömbje a karakterlánc növekvő sorrendjében van rendezve. Például Ádám Danil elé kerül, mert "A" a "D" elé kerül.
Mivel minden nem definiált elemet sztringekké konvertálnak a rendezés előtt, az Number
adattípusok ebben a sorrendben vannak rendezve.
Itt láthatjuk, hogy annak ellenére, hogy az 1000 számszerűen nagyobb, mint 50 , a rendezett lista elején szerepel. Azért, mert "1" <"5" .
2. példa: Rendezés az egyedi funkció használatával
Amikor az összehasonlító funkció átadódik,
- Az összes nem
undefined
tömb elem az összehasonlítás függvény visszatérési értéke szerint van rendezve. - Az összes nem definiált elem a tömb végéig van rendezve, és nem hívja meg nekik az összehasonlító funkciót.
Tegyük fel, hogy a fenti nevek tömbjét úgy szeretnénk rendezni, hogy a leghosszabb név utolsóként szerepeljen, ahelyett, hogy ábécésorrendbe rendezzük. Megtehetjük a következő módon:
// 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);
Kimenet
("Ben", "Adam", "Danil", "Jeffrey", "Fabiano")
Itt a rendezés a logikán alapul a.length - b.length
. Ez alapvetően azt jelenti, hogy a rövidebb hosszúságú elem a Array
. Elején jelenik meg .
Először ismerjük meg az opcionális compareFunction
működését.
Bármelyiknek compareFunction
a következő szintaxisa van:
function (a, b)( // sorting logic // return a Number )
A sort()
módszer összehasonlítja a tömb összes értékét úgy, hogy egyszerre két értéket ad át a compareFunction
. A két a és b paraméter ezt a két értéket képviseli.
A compareFunction
vissza kell adnia a Number
. Ezt a visszaküldött értéket használják az elemek rendezésére a következő módon:
- Ha a visszatérő érték <0 , akkor az a b elé van rendezve (a a előtt b).
- Ha a visszatérő érték> 0 , akkor a b az a előtt rendeződik (b a előtt áll).
- Ha a visszaadott érték == 0 , akkor a és b változatlanok maradnak egymáshoz képest.
A 2. példában a tömböt a következő módon rendezzük:
function len_compare(a, b)( return a.length - b.length; )
Itt:
- Ha a.hossz - b.hossz <0 , akkor a előtt b jön. Például az "Adam" a "Jeffrey" előtt áll, 4 - 7 <0 .
- Ha a.hossz - b.hossz> 0 , b az a elé kerül. Például a "Danil" a "Ben" után következik, mint 5 - 3> 0.
- Ha a.hossz - b.hossz == 0 , helyzetük változatlan. Például a "Jeffrey" és a "Fabiano" relatív helyzete változatlan, mert 7 - 7 == 0 .
Láthatjuk, hogy ez azt eredményezi, hogy a húrokat növekvő sorrendben rendezi hosszúságuk szerint.
3. példa: Számok szortírozása numerikusan
Mivel minden nem definiált elemet sztringekké konvertálnak a rendezés előtt, alapértelmezés szerint nem rendezhetjük a számokat számértékük alapján.
Lássuk, hogyan tudjuk ezt megvalósítani egy egyedi függvény segítségével.
// 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);
Kimenet
Növekvő - 2,7,14,50,1000 Csökkenő - 1000,50,14,7,2
Ebben a példában a tömböt rendeztük:
function (a, b) ( return a - b; )
Itt,
- Ha a - b <0 , akkor a előtt b jön. Például a 2 7 előtt áll, 2 - 7 <0 .
- Ha a - b> 0 , b az a elé kerül. Például az 1000 50 után következik, mint 1000 - 50> 0.
Láthatjuk, hogy ennek eredményeként a számokat növekvő numerikus értékük szerint rendezzük.
Hasonlóképpen használhatjuk b - a
őket csökkenő sorrendbe is. Ne feledje, hogy használhatjuk az ES2015-ben definiált nyílfüggvény-kifejezést is.
A rendezett tömböt a beépített tömb reverse()
módszerrel is megfordíthatjuk (csökkenő sorrendben) . További információért látogasson el a JavaScript tömb fordított () oldalára.