Zoradenie poľa JavaScript ()

Metóda sort Array JavaScriptu triedi položky poľa.

sort()Metóda triedi prvky danej poľa v určitom vzostupnom alebo zostupnom poradí.

Syntax sort()metódy je:

 arr.sort(compareFunction)

Tu je arr pole.

Parametre sort ()

sort()Metóda berie v:

  • compareFunction (voliteľné) - slúži na definovanie vlastného poradia triedenia.

Vrátiť hodnotu z sort ()

  • Vráti pole po zoradení prvkov poľa na mieste (čo znamená, že zmení pôvodné pole a nevytvorí sa žiadna kópia).

Príklad 1: Triedenie prvkov poľa

Keď nie je porovnaná funkcia úspešná,

  • Všetky undefinedprvky mimo poľa sa najskôr prevedú na reťazce.
  • Tieto reťazce sa potom porovnajú pomocou ich bodovej hodnoty kódu UTF-16.
  • Zoradenie je zoradené vzostupne.
  • Všetky undefinedprvky sú zoradené na koniec poľa.
 // 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ýkon

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

Tu vidíme, že pole mien je zoradené vzostupne podľa reťazca. Napríklad Adam prichádza pred Danila, pretože „A“ prichádza pred „D“.

Pretože všetky nedefinované prvky sa pred triedením prevedú na reťazce, Numberdátové typy sa zoradia v tomto poradí.

Tu vidíme, že aj keď je 1000 číselne viac ako 50 , prichádza na začiatok zoradeného zoznamu. Je to preto, že „1“ <„5“ .

Príklad 2: Triedenie pomocou vlastnej funkcie

Keď je porovnaná funkcia splnená,

  • Všetky undefinedprvky mimo poľa sú zoradené podľa návratovej hodnoty compareFunction.
  • Všetky nedefinované prvky sú zoradené na koniec poľa a nie je pre ne volaná funkcia compareFunction.

Predpokladajme, že chceme zoradiť pole vyššie uvedených mien tak, aby najdlhšie meno bolo priezvisko, a nie zoradiť ho podľa abecedy. Môžeme to urobiť nasledujúcim spôsobom:

 // 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ýkon

 („Ben“, „Adam“, „Danil“, „Jeffrey“, „Fabiano“)

Tu je triedenie založené na logike a.length - b.length. V zásade to znamená, že položka s kratšou dĺžkou sa objaví na začiatku Array.

Najprv pochopíme, ako compareFunctionfunguje voliteľný modul.

Any compareFunctionmá nasledujúcu syntax:

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

sort()Metóda porovnáva všetky hodnoty poľa priechodom dvoch hodnôt v čase do compareFunction. Dva parametre a a b predstavujú tieto dve hodnoty.

Mal compareFunctionby vrátiť a Number. Táto vrátená hodnota sa používa na triedenie prvkov nasledujúcim spôsobom:

  • Ak je vrátená hodnota <0 , a je zoradené pred b (a prichádza pred b).
  • Ak je vrátená hodnota> 0 , b sa zoradí pred a (b príde pred a).
  • Ak je vrátená hodnota == 0 , a a b zostanú navzájom nezmenené.

V príklade 2 triedime pole pomocou:

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

Tu:

  • Ak a.length - b.length <0 , a prichádza pred b. Napríklad „Adam“ je pred „Jeffrey“ ako 4 - 7 <0 .
  • Ak a.length - b.length> 0 , b prichádza pred a. Napríklad „Danil“ nasleduje po „Benovi“ ako 5 - 3> 0.
  • Ak a.length - b.length == 0 , ich pozícia sa nezmení. Napríklad relatívna pozícia výrazov „Jeffrey“ a „Fabiano“ sa nezmení, pretože 7 - 7 == 0 .

Vidíme, že to vedie k triedeniu reťazcov podľa ich dĺžky vo vzostupnom poradí.

Example 3: Sorting Numbers Numerically

Since all non-undefined elements are converted to strings before sorting them, we cannot sort numbers using their numeric value by default.

Let's see how we can implement this using a custom function.

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

Output

 Ascending - 2,7,14,50,1000 Descending - 1000,50,14,7,2

In this example, we sorted the array using:

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

Here,

  • If a - b < 0, a comes before b. For example, 2 comes before 7 as 2 - 7 < 0.
  • If a - b> 0, b comes before a. For example, 1000 comes after 50 as 1000 - 50> 0.

We can see that this results in the sorting of the numbers according to their ascending numeric value.

Podobne ich môžeme použiť b - ana zoradenie zostupne. Upozorňujeme, že môžeme tiež použiť výraz funkcie šípky definovaný v ES2015.

Môžeme tiež obrátiť (zostupne) zoradené pole pomocou metódy zabudovaného poľa reverse(). Ak sa chcete dozvedieť viac, navštívte JavaScript Array reverse ().

Zaujímavé články...