Debido a lo que cubre el estándar ECMA acerca de las matrices de clasificación (de una manera muy simplificada) :
- Si en la comparación se recibe 1 A, desciende una posición.
- Si recibe -1 mantener la posición y definir la clasificación superior hacia la B.
- Si recibe 0 no hace nada.
La forma más segura de garantizar el mismo comportamiento en todos los navegadores es:
// 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;
});
Para los objetos primitivos es Posible utilizar la versión corta
// descending order
abc.sort(function(a , b){
return b - a;
});
// ascending order
abc.sort(function(a , b){
return a - b;
});
de objetos como:
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 }
La manera correcta es:
items.sort(function(a , b){
var result = a == b ? 0 : b > a ? -1 : 1
if(result === 0)
{
// implement a tight break evaluation
}
return result ;
});
Este es el camino correcto porque la forma en que el navegador itera no está definida en el estándar ECMA y el navegador puede iterar de diferentes maneras. Por ejemplo, la mayoría de los navegadores iteran de arriba hacia abajo, pero Chrome itera el primer elemento con el último y sube el camino. Por lo tanto, en caso de un ajuste puede dar lugar a resultados diferentes de la mayoría de los navegadores.
misma solución no funciona al ordenar la fecha en un formato "mm/dd/aaaa" –