Matrici di ordinamento JavaScript
Ordinamento di una matrice
Il sort()
metodo ordina un array in ordine alfabetico:
Esempio
const fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();
Inversione di un array
Il reverse()
metodo inverte gli elementi in una matrice.
Puoi usarlo per ordinare un array in ordine decrescente:
Esempio
const fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();
fruits.reverse();
Ordinamento numerico
Per impostazione predefinita, la sort()
funzione ordina i valori come stringhe .
Funziona bene per gli archi ("Apple" viene prima di "Banana").
Tuttavia, se i numeri sono ordinati come stringhe, "25" è maggiore di "100", perché "2" è maggiore di "1".
Per questo motivo, il sort()
metodo produrrà un risultato errato durante l'ordinamento dei numeri.
Puoi risolvere questo problema fornendo una funzione di confronto :
Esempio
const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b});
Usa lo stesso trucco per ordinare un array discendente:
Esempio
const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a});
La funzione di confronto
Lo scopo della funzione di confronto è definire un ordinamento alternativo.
La funzione di confronto dovrebbe restituire un valore negativo, zero o positivo, a seconda degli argomenti:
function(a, b){return a - b}
Quando la sort()
funzione confronta due valori, invia i valori alla funzione di confronto e ordina i valori in base al valore restituito (negativo, zero, positivo).
Se il risultato è negativo a
viene ordinato prima di
b
.
Se il risultato è positivo b
viene ordinato prima a
.
Se il risultato è 0 non vengono apportate modifiche all'ordinamento dei due valori.
Esempio:
La funzione di confronto confronta tutti i valori nell'array, due valori alla volta (a, b)
.
Quando si confrontano 40 e 100, il sort()
metodo chiama la funzione di confronto(40, 100).
La funzione calcola 40 - 100 (a - b)
e poiché il risultato è negativo (-60), la funzione di ordinamento ordinerà 40 come un valore inferiore a 100.
Puoi utilizzare questo frammento di codice per sperimentare l'ordinamento numerico e alfabetico:
<button onclick="myFunction1()">Sort Alphabetically</button>
<button
onclick="myFunction2()">Sort Numerically</button>
<p id="demo"></p>
<script>
const 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>
Ordinamento di una matrice in ordine casuale
Esempio
const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return 0.5 - Math.random()});
Il metodo Fisher Yates
L'esempio sopra, array .sort(), non è accurato, favorirà alcuni numeri rispetto ad altri.
Il metodo corretto più popolare, è chiamato Fisher Yates shuffle, ed è stato introdotto nella scienza dei dati già nel 1938!
In JavaScript il metodo può essere tradotto in questo:
Esempio
const points = [40, 100, 1, 5, 25, 10];
for (let i = points.length -1; i > 0;
i--) {
let j = Math.floor(Math.random() * i)
let k = points[i]
points[i] = points[j]
points[j] = k
}
Trova il valore dell'array più alto (o più basso).
Non ci sono funzioni integrate per trovare il valore massimo o minimo in una matrice.
Tuttavia, dopo aver ordinato una matrice, è possibile utilizzare l'indice per ottenere i valori più alti e più bassi.
Ordinamento crescente:
Esempio
const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b});
// now points[0] contains the lowest value
// and points[points.length-1] contains the highest value
Ordinamento decrescente:
Esempio
const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a});
// now points[0] contains the highest value
// and points[points.length-1] contains the lowest value
L'ordinamento di un intero array è un metodo molto inefficiente se si desidera trovare solo il valore più alto (o più basso).
Utilizzo di Math.max() su un array
Puoi usare Math.max.apply
per trovare il numero più alto in un array:
Esempio
function myArrayMax(arr) {
return Math.max.apply(null, arr);
}
Math.max.apply(null, [1, 2, 3])
è equivalente a Math.max(1, 2, 3)
.
Utilizzo di Math.min() su un array
Puoi usare Math.min.apply
per trovare il numero più basso in un array:
Esempio
function myArrayMin(arr) {
return Math.min.apply(null, arr);
}
Math.min.apply(null, [1, 2, 3])
è equivalente a Math.min(1, 2, 3)
.
I miei metodi JavaScript min/max
La soluzione più veloce è utilizzare un metodo "fatto in casa".
Questa funzione scorre un array confrontando ogni valore con il valore più alto trovato:
Esempio (Trova massimo)
function myArrayMax(arr) {
let len = arr.length;
let max = -Infinity;
while (len--) {
if (arr[len] > max) {
max = arr[len];
}
}
return max;
}
Questa funzione scorre un array confrontando ogni valore con il valore più basso trovato:
Esempio (Trova min)
function myArrayMin(arr) {
let len = arr.length;
let min = Infinity;
while (len--) {
if (arr[len] < min) {
min = arr[len];
}
}
return min;
}
Ordinamento di array di oggetti
Gli array JavaScript spesso contengono oggetti:
Esempio
const cars = [
{type:"Volvo", year:2016},
{type:"Saab", year:2001},
{type:"BMW", year:2010}
];
Anche se gli oggetti hanno proprietà di tipi di dati diversi, il sort()
metodo può essere utilizzato per ordinare l'array.
La soluzione è scrivere una funzione di confronto per confrontare i valori della proprietà:
Esempio
cars.sort(function(a, b){return a.year - b.year});
Il confronto delle proprietà delle stringhe è un po' più complesso:
Esempio
cars.sort(function(a, b){
let x = a.type.toLowerCase();
let y = b.type.toLowerCase();
if (x < y) {return -1;}
if (x > y) {return 1;}
return 0;
});
Riferimento completo all'array
Per un riferimento completo all'array, vai al nostro:
Riferimento completo all'array JavaScript .
Il riferimento contiene descrizioni ed esempi di tutte le proprietà e i metodi dell'array.