JavaScript tömb rendezés ()

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 undefinedtö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 undefinedelem 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 Numberadattí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 undefinedtö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 compareFunctionműködését.

Bármelyiknek compareFunctiona 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 compareFunctionvissza 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.

érdekes cikkek...