Třídění pole JavaScript ()

Metoda sort () JavaScriptu seřadí položky pole.

sort()Metoda třídí prvky dané pole v určitém vzestupném nebo sestupném pořadí.

Syntaxe sort()metody je:

 arr.sort(compareFunction)

Zde je arr pole.

Parametry sort ()

sort()Metoda bere v:

  • compareFunction (volitelné) - slouží k definování vlastního pořadí řazení.

Vrátit hodnotu z sort ()

  • Vrátí pole po seřazení prvků pole na místě (to znamená, že změní původní pole a neprovede se žádná kopie).

Příklad 1: Třídění prvků pole

Když funkce porovnání není předána,

  • Všechny undefinedprvky mimo pole se nejprve převedou na řetězce.
  • Tyto řetězce jsou poté porovnány pomocí jejich bodové hodnoty kódu UTF-16.
  • Třídění se provádí vzestupně.
  • Všechny undefinedprvky jsou seřazeny na konec pole.
 // 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)

Výstup

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

Zde vidíme, že pole jmen je řazeno vzestupně podle řetězce. Například Adam přichází před Danilem, protože „A“ přichází před „D“.

Protože všechny nedefinované prvky jsou před tříděním převedeny na řetězce, jsou Numberdatové typy seřazeny v tomto pořadí.

Zde vidíme, že i když je 1000 číselně větší než 50 , přichází na začátek seřazeného seznamu. Je to proto, že „1“ <„5“ .

Příklad 2: Třídění pomocí uživatelské funkce

Když je předána funkce compareFunction,

  • Všechny undefinedprvky, které nejsou pole, jsou seřazeny podle návratové hodnoty CompareFunction.
  • Všechny nedefinované prvky jsou řazeny na konec pole a pro ně není volána funkce compareFunction.

Předpokládejme, že chceme řadit výše uvedená pole jmen tak, aby nejdelší název přišel jako poslední, místo aby jsme jej třídili podle abecedy. Můžeme to udělat následujícím způsobem:

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

Výstup

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

Zde je třídění založeno na logice a.length - b.length. V zásadě to znamená, že položka s kratší délkou se objeví na začátku Array.

Nejprve pochopíme, jak compareFunctionfunguje volitelný doplněk .

Any compareFunctionmá následující syntaxi:

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

sort()Metoda porovnává všechny hodnoty pole průchodem dvou hodnot v čase do compareFunction. Dva parametry a a b představují tyto dvě hodnoty.

compareFunctionBy měl vrátit Number. Tato vrácená hodnota se používá k řazení prvků následujícím způsobem: This returned value is used to sort the elements in the following way:

  • Pokud je vrácená hodnota <0 , je a seřazeno před b (a přijde před b).
  • Pokud je vrácená hodnota> 0 , b se seřadí před a (b přijde před a).
  • Pokud je vrácená hodnota == 0 , a a b zůstanou navzájem nezměněny.

V příkladu 2 řadíme pole pomocí:

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

Tady:

  • Pokud a.length - b.length <0 , a předchází b. Například „Adam“ je před „Jeffrey“ jako 4 - 7 <0 .
  • Pokud a.length - b.length> 0 , b přijde před a. Například „Danil“ následuje po „Benovi“ jako 5 - 3> 0.
  • Pokud a.length - b.length == 0 , jejich pozice se nezmění. Například relativní pozice „Jeffrey“ a „Fabiano“ se nezmění, protože 7 - 7 == 0 .

Vidíme, že to má za následek třídění řetězců podle jejich délky ve vzestupném pořadí.

Příklad 3: Číselné řazení čísel

Protože všechny nedefinované prvky jsou před tříděním převedeny na řetězce, nemůžeme ve výchozím nastavení třídit čísla pomocí jejich číselné hodnoty.

Podívejme se, jak to můžeme implementovat pomocí vlastní funkce.

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

Výstup

 Vzestupně - 2,7,14,50,1000 Sestupně - 1000,50,14,7,2

V tomto příkladu jsme pole setřídili pomocí:

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

Tady,

  • Pokud a - b <0 , a předchází b. Například 2 přijde před 7 jako 2 - 7 <0 .
  • Pokud a - b> 0 , b přichází před a. Například 1000 přijde po 50 jako 1000 - 50> 0.

Vidíme, že to má za následek třídění čísel podle jejich vzestupné číselné hodnoty.

Podobně je můžeme použít b - ak seřazení v sestupném pořadí. Všimněte si, že můžeme také použít výraz funkce šipky definovaný v ES2015.

Můžeme také obrátit (sestupně) seřazené pole pomocí vestavěné reverse()metody pole . Chcete-li se dozvědět více, navštivte JavaScript Array reverse ().

Zajímavé články...