JavaScript Array sort ()

Il metodo JavaScript Array sort () ordina gli elementi di un array.

Il sort()metodo ordina gli elementi di un dato array in uno specifico ordine crescente o decrescente.

La sintassi del sort()metodo è:

 arr.sort(compareFunction)

Qui, arr è un array.

parametri sort ()

Il sort()metodo comprende:

  • compareFunction (opzionale) - Viene utilizzato per definire un ordinamento personalizzato.

Valore restituito da sort ()

  • Restituisce l'array dopo aver ordinato gli elementi dell'array in posizione (il che significa che cambia l'array originale e non viene eseguita alcuna copia).

Esempio 1: ordinamento degli elementi di un array

Quando compareFunction non viene passato,

  • Tutti gli undefinedelementi non array vengono prima convertiti in stringhe.
  • Queste stringhe vengono quindi confrontate utilizzando il valore del punto di codice UTF-16.
  • L'ordinamento avviene in ordine crescente.
  • Tutti gli undefinedelementi vengono ordinati alla fine della matrice.
 // 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)

Produzione

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

Qui, possiamo vedere che l'array dei nomi è ordinato in ordine crescente della stringa. Ad esempio, Adam viene prima di Danil perché "A" viene prima di "D".

Poiché tutti gli elementi non indefiniti vengono convertiti in stringhe prima di Numberordinarli , i tipi di dati vengono ordinati in tale ordine.

Qui, possiamo vedere che anche se 1000 è maggiore di 50 numericamente, si trova all'inizio dell'elenco ordinato. È perché "1" <"5" .

Esempio 2: ordinamento utilizzando la funzione personalizzata

Quando viene passato compareFunction,

  • Tutti gli undefinedelementi non array vengono ordinati in base al valore restituito da compareFunction.
  • Tutti gli elementi non definiti vengono ordinati alla fine dell'array e compareFunction non viene chiamato per essi.

Supponiamo di voler ordinare l'array dei nomi sopra in modo che il nome più lungo venga per ultimo, invece di ordinarlo alfabeticamente. Possiamo farlo nel modo seguente:

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

Produzione

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

Qui, l'ordinamento è basato sulla logica a.length - b.length. Fondamentalmente significa che l'elemento di lunghezza inferiore apparirà all'inizio del file Array.

Vediamo prima di tutto come funziona l'opzionale compareFunction.

Any compareFunctionha la seguente sintassi:

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

Il sort()metodo confronta tutti i valori della matrice passando due valori alla volta al file compareFunction. I due parametri a e b rappresentano rispettivamente questi due valori.

L' compareFunctiondovrebbe restituire un Number. Questo valore restituito viene utilizzato per ordinare gli elementi nel modo seguente:

  • Se il valore restituito è <0 , a viene ordinato prima di b (a viene prima di b).
  • Se il valore restituito è> 0 , b viene ordinato prima di a (b viene prima di a).
  • Se il valore restituito == 0 , aeb rimangono invariati l'uno rispetto all'altro.

Nell'Esempio 2, ordiniamo l'array usando:

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

Qui:

  • Se a . Lunghezza - b. Lunghezza <0 , a viene prima di b. Ad esempio, "Adam" viene prima di "Jeffrey" come 4 - 7 <0 .
  • Se a . Lunghezza - b. Lunghezza> 0 , b viene prima di a. Ad esempio, "Danil" viene dopo "Ben" come 5 - 3> 0.
  • Se a.length - b.length == 0 , la loro posizione rimane invariata. Ad esempio, la posizione relativa di "Jeffrey" e "Fabiano" rimane invariata perché 7 - 7 == 0 .

Possiamo vedere che questo si traduce nell'ordinamento delle stringhe in base alla loro lunghezza in ordine crescente.

Esempio 3: ordinamento numerico dei numeri

Poiché tutti gli elementi non indefiniti vengono convertiti in stringhe prima di ordinarli, non è possibile ordinare i numeri utilizzando il loro valore numerico per impostazione predefinita.

Vediamo come possiamo implementarlo utilizzando una funzione personalizzata.

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

Produzione

 Ascendente - 2,7,14,50,1000 Discendente - 1000,50,14,7,2

In questo esempio, abbiamo ordinato l'array utilizzando:

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

Qui,

  • Se a - b <0 , a viene prima di b. Ad esempio, 2 viene prima di 7 come 2 - 7 <0 .
  • Se a - b> 0 , b viene prima di a. Ad esempio, 1000 viene dopo 50 come 1000-50> 0.

Possiamo vedere che questo si traduce nell'ordinamento dei numeri in base al loro valore numerico crescente.

Allo stesso modo, possiamo usarli b - aper ordinarli in ordine decrescente. Nota che possiamo anche usare l'espressione della funzione freccia definita in ES2015.

Possiamo anche invertire (ordine decrescente) l'array ordinato utilizzando il reverse()metodo array integrato . Per saperne di più, visita JavaScript Array reverse ().

Articoli interessanti...