Ordinamento degli array JavaScript

sort() Il metodo è uno dei metodi più potenti dell'array.

Ordinamento dell'array

sort() Il metodo ordina l'array in ordine alfabetico:

Esempio

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();            // Ordina gli elementi di fruits

Prova tu stesso

Inverte l'array

reverse() Il metodo inverte gli elementi dell'array.

Puoi usarlo per ordinare un array in ordine decrescente:

Esempio

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();            // Ordina gli elementi di fruits
fruits.reverse();         // Inverte l'ordine degli elementi

Prova tu stesso

Ordinamento numerico

Per default,sort() La funzione ordinastringheordina i valori in base all'ordine.

Questa funzione è molto adatta alle stringhe ("Apple" viene prima di "Banana").

Ma se i numeri vengono ordinati come stringhe, "25" è maggiore di "100", perché "2" è maggiore di "1".

Per questo motivo,sort() Il metodo può produrre risultati non corretti durante l'ordinamento numerico.

Attraverso unaFunzione di rapportoPer correggere questo problema:

Esempio

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b}); 

Prova tu stesso

Usa la stessa tecnica per ordinare un array in ordine decrescente:

Esempio

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a}); 

Prova tu stesso

Funzione di rapporto

L'obiettivo della funzione di confronto è definire un'ordine di sortimento diverso.

La funzione di confronto deve restituire un valore negativo, zero o positivo, a seconda dei parametri:

function(a, b){return a-b}

Quando sort() Quando la funzione confronta due valori, invia i valori alla funzione di confronto e ordina questi valori in base al valore restituito (negativo, zero o positivo).

Esempio:

Quando si confrontano 40 e 100,sort() Il metodo chiama la funzione di confronto function(40,100).

La funzione calcola 40-100 e restituisce -60 (valore negativo).

La funzione di ordinamento assegnerà un valore inferiore a 40 rispetto a 100.

Puoi utilizzare il seguente snippet di codice per testare l'ordinamento numerico e letterale:

<button onclick="myFunction1()">Ordina per lettere</button>
<button onclick="myFunction2()">Ordina per numero</button>
<p id="demo"></p>
<script>
var points = [40, 100, 1, 5, 25, 10];
document.getElementById("demo").innerHTML = points;
function myFunction1() {
		points.sort();
		document.getElementById("demo").innerHTML  = points;
}
function myFunction2() {
		points.sort(function(a, b){return  a - b});
		document.getElementById("demo").innerHTML = points;
}
</script>

Prova tu stesso

Ordina l'array in ordine casuale

Esempio

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return 0.5 - Math.random()}); 

Prova tu stesso

Trova il valore più alto (o più basso) dell'array

JavaScript non fornisce una funzione integrata per trovare il valore massimo o minimo di un array.

Ma dopo aver ordinato l'array, puoi usare gli indici per ottenere il valore più alto o più basso.

Ordinamento crescente:

Esempio

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b});
// Ora points[0] contiene il valore più basso
// E points[points.length-1] contiene il valore più alto

Prova tu stesso

Ordinamento decrescente:

Esempio

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a});
// Ora points[0] contiene il valore più alto
// E points[points.length-1] contiene il valore più basso

Prova tu stesso

Se hai bisogno solo di trovare il valore più alto o più basso, ordinare l'intero array è un metodo estremamente inefficiente.

applica Math.max() all'array

Puoi usare Math.max.apply per trovare il valore più alto dell'array:

Esempio

function myArrayMax(arr) {
    return Math.max.apply(null, arr);
}

Prova tu stesso

Math.max.apply([1, 2, 3]) uguale a Math.max(1, 2, 3).

applica Math.min() all'array

Puoi usare Math.min.apply per trovare il valore più basso dell'array:

Esempio

function myArrayMin(arr) {
    return Math.min.apply(null, arr);
}

Prova tu stesso

Math.min.apply([1, 2, 3]) uguale a Math.min(1, 2, 3).

Mie funzioni Min / Max JavaScript

Il metodo più veloce è utilizzare un metodo 'fatto in casa'.

Questa funzione esplora l'array, confrontando ogni valore con il valore più alto trovato:

Esempio (trovare Max)

function myArrayMax(arr) {
    var len = arr.length
    var max = -Infinity;
    while (len--) {
        if (arr[len] > max) {
            max = arr[len];
        }
    }
    return max;
}

Prova tu stesso

Questa funzione esplora l'array, confrontando ogni valore con il valore più basso trovato:

Esempio (trovare Min)

function myArrayMin(arr) {
    var len = arr.length
    var min = Infinity;
    while (len--) {
        if (arr[len] < min) {
            min = arr[len];
        }
    }
    return min;
}

Prova tu stesso

Ordinamento array di oggetti

Gli array JavaScript spesso contengono oggetti:

Esempio

var cars = [
{type:"Volvo", year:2016},
{type:"Saab", year:2001},
{type:"BMW", year:2010}];

Anche se gli oggetti possiedono attributi di tipo dati diversi:sort() Questo metodo può ancora essere utilizzato per ordinare gli array.

La soluzione è confrontare i valori delle proprietà attraverso una funzione di confronto:

Esempio

cars.sort(function(a, b){return a.year - b.year});

Prova tu stesso

La comparazione delle proprietà delle stringhe è un po' più complessa:

Esempio

cars.sort(function(a, b){
	  var x = a.type.toLowerCase();
	  var y = b.type.toLowerCase();
	  if (x < y) {return -1;}
	  if (x > y) {return 1;}
	  return 0;
});

Prova tu stesso