Sortare matrice JavaScript ()

Metoda JavaScript Array sort () sortează elementele unui tablou.

sort()Metoda sorteaza elementele unui anumit matrice într - o anumită ordine crescătoare sau descrescătoare.

Sintaxa sort()metodei este:

 arr.sort(compareFunction)

Aici, arr este o matrice.

sort () Parametri

sort()Metoda ia în:

  • compareFunction (opțional) - Este folosit pentru a defini o ordine de sortare personalizată.

Returnează valoarea din sort ()

  • Returnează matricea după sortarea elementelor matricei în loc (ceea ce înseamnă că modifică matricea originală și nu se face nicio copie).

Exemplul 1: Sortarea elementelor unui tablou

Când funcția compareFunction nu este trecută,

  • Toate undefinedelementele care nu sunt matrice sunt mai întâi convertite în șiruri.
  • Aceste șiruri sunt apoi comparate folosind valoarea punctului de cod UTF-16.
  • Sortarea se face în ordine crescătoare.
  • Toate undefinedelementele sunt sortate la sfârșitul matricei.
 // 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)

Ieșire

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

Aici, putem vedea că matricea de nume este sortată în ordine crescătoare a șirului. De exemplu, Adam vine înaintea lui Danil pentru că „A” vine înainte de „D”.

Deoarece toate elementele nedefinite sunt convertite în șiruri înainte de a le sorta, Numbertipurile de date sunt sortate în această ordine.

Aici, putem vedea că, deși 1000 este mai mare decât 50 numeric, vine la începutul listei sortate. Acest lucru se datorează faptului că „1” <„5” .

Exemplul 2: Sortarea utilizând funcția personalizată

Când funcția compareFunction este trecută,

  • Toate undefinedelementele care nu sunt matrice sunt sortate în funcție de valoarea returnată a compareFunction.
  • Toate elementele nedefinite sunt sortate la sfârșitul matricei și compareFunction nu este apelată pentru ele.

Să presupunem că vrem să sortăm matricea de nume de mai sus astfel încât cel mai lung nume să apară pe urmă, mai degrabă decât să o sortăm alfabetic. O putem face în felul următor:

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

Ieșire

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

Aici, sortarea se bazează pe logică a.length - b.length. Practic înseamnă că elementul cu lungime mai mică va apărea la începutul Array.

Să înțelegem mai întâi cum compareFunctionfuncționează opționalul .

Oricare compareFunctionare următoarea sintaxă:

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

sort()Metoda compară toate valorile de matrice prin trecerea a două valori la un timp la compareFunction. Cei doi parametri a și b reprezintă respectiv aceste două valori.

compareFunctionTrebuie să returneze o Number. Această valoare returnată este utilizată pentru a sorta elementele în felul următor:

  • Dacă valoarea returnată <0 , a este sortată înainte de b (a vine înainte de b).
  • Dacă valoarea returnată> 0 , b este sortat înainte de a (b vine înainte de a).
  • Dacă valoarea returnată == 0 , a și b rămân neschimbate una față de cealaltă.

În exemplul 2, sortăm matricea folosind:

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

Aici:

  • Dacă a.length - b.length <0 , a vine înainte de b. De exemplu, „Adam” vine înainte de „Jeffrey” ca 4 - 7 <0 .
  • Dacă a.length - b.length> 0 , b vine înaintea a. De exemplu, „Danil” vine după „Ben” ca 5 - 3> 0.
  • Dacă a.length - b.length == 0 , poziția lor este neschimbată. De exemplu, poziția relativă a „Jeffrey” și „Fabiano” este neschimbată deoarece 7 - 7 == 0 .

Putem vedea că acest lucru are ca rezultat sortarea șirurilor în funcție de lungimea lor în ordine crescătoare.

Exemplul 3: Sortarea numerelor numeric

Deoarece toate elementele nedefinite sunt convertite în șiruri înainte de a le sorta, nu putem sorta numerele folosind valoarea lor numerică în mod implicit.

Să vedem cum putem implementa acest lucru folosind o funcție personalizată.

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

Ieșire

 Ascendent - 2,7,14,50,1000 Descendent - 1000,50,14,7,2

În acest exemplu, am sortat matricea folosind:

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

Aici,

  • Dacă a - b <0 , a vine înainte de b. De exemplu, 2 este înainte de 7 ca 2 - 7 <0 .
  • Dacă a - b> 0 , b vine înaintea lui a. De exemplu, 1000 vine după 50 ca 1000 - 50> 0.

Putem vedea că acest lucru are ca rezultat sortarea numerelor în funcție de valoarea lor numerică ascendentă.

În mod similar, putem folosi b - apentru a le sorta în ordine descrescătoare. Rețineți că putem folosi și expresia funcției săgeată definită în ES2015.

De asemenea, putem inversa (ordinea descrescătoare) matricea sortată folosind reverse()metoda matricei încorporată . Pentru a afla mai multe, vizitați JavaScript Array reverse ().

Articole interesante...