causa di ciò che copre l'ECMA standard sugli array di ordinamento (in modo molto semplificato) :
- Se nel confronto riceve 1 A discendere una posizione.
- Se riceve -1 mantiene la posizione e definisce la posizione superiore verso B.
- Se riceve 0 non fa nulla.
Il modo più sicuro per garantire lo stesso comportamento in tutti i browser è:
// descending order
abc =[10,2,4,1];
abc.sort(function(a , b){
return a > b ? -1 : 1;
});
// ascending order
abc.sort(function(a , b){
return a > b ? 1 : -1;
});
Per gli oggetti primitivi è posible di utilizzare la versione breve
// descending order
abc.sort(function(a , b){
return b - a;
});
// ascending order
abc.sort(function(a , b){
return a - b;
});
per oggetti come:
var items = [
{ name: 'Edward', value: 21 },
{ name: 'Sharpe', value: 27 },
{ name: 'And', value: 31 },
{ name: 'The', value: -12 },
{ name: 'Zeros', value: 37 },
{ name: 'Magnetic', value: 37 }
Il modo giusto è:
items.sort(function(a , b){
var result = a == b ? 0 : b > a ? -1 : 1
if(result === 0)
{
// implement a tight break evaluation
}
return result ;
});
Questo è il modo giusto, perché il modo in cui le itera del browser non è definita nello standard ECMA e browser potrebbe iterare in modi diversi. Ad esempio la maggior parte dei browser eseguono l'iterazione dall'alto verso il basso, ma il cromo itera il 1 ° elemento con l'ultimo e aumenta la velocità. Quindi, in caso di uno stretto potrebbero risultare risultati diversi della maggior parte dei browser.
la stessa soluzione non funziona quando la data di ordinamento in tale formato "gg/mm/aaaa" –