English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Metodo di ordinamento sort dell'array Array

L'oggetto Array in JavaScript ha un metodo di ordinamento sort() che ordina gli elementi dell'array, ma a volte i risultati dell'ordinamento non sono soddisfacenti, come

var arr = [12, 1, 2, 21, 3];
arr.sort();
alert(arr);   Il risultato ottenuto è 1,12,2,21,3

Perché? Perché l'ordinamento predefinito in JavaScript è in base al codice ASCII, quindi i numeri sono ordinati secondo la loro forma di stringa.

var strArr = ['a', '2', 'a2', '2a', 'b', '3'];
alert(strArr.sort());

Che risultato otteniamo? 2,2a,3,a,a2,b


Poiché il codice ASCII dei numeri è più piccolo rispetto a quello delle lettere, i numeri vengono messi davanti e le lettere vengono messi dietro.

Come possiamo trattare l'array arr per continuare a ordinare numericamente?

JavaScript ci fornisce un punto di ingresso per passare un parametro a sort(), ovvero la funzione di confronto, per comunicare all'algoritmo di ordinamento quale relazione c'è tra i valori.

La funzione di confronto è una funzione con un algoritmo specifico.

function compare_fn(value1, value2) {
 if (value1 < value2) {
 return -1;
 } else if (value1 > value2) {
 return 1;
 } else {
 return 0;
 }
}

Passare la funzione di confronto compare_fn a sort, quindi ordinare e poi esportare

arr.sort(compare_fn);
alert(arr);  Ottenere 1, 2, 3, 12, 21

La definizione del valore di ritorno del metodo sort dell'oggetto Array in JavaScript è

Valore negativo: se il primo parametro passato è minore del secondo parametro

Zero: i due valori sono uguali

Valore positivo: se il primo parametro è maggiore del secondo parametro


La funzione di confronto può essere abbreviata come

function compare_fn(value1, value2) {
 return value1 - value2;
}

Questo confronto è in ordine crescente


Se si desidera ordinare in ordine decrescente, è sufficiente cambiare il segno del valore di ritorno, invertendo tutti i valori di ritorno.

La funzione di confronto abbreviata è

function compare_fn(value1, value2) {
 return -(value1 - value2);
}   

cioè

function compare_fn(value1, value2) {
 return value2 - value1;
}

La notazione semplice è: in ordine crescente; in ordine decrescente.

Ecco tutto il contenuto che l'autore ha condiviso su come ordinare l'array Array con il metodo sort, speriamo che sia utile come riferimento e che sosteniate il tutorial Shouting.

Ti potrebbe interessare