sort ordering objects numeros array alphabetically javascript arrays sorting google-chrome

ordering - ¿Ordenar arreglo de Javascript con Chrome?



sort random array javascript (4)

¿Hay alguna forma de ordenar una matriz con Chrome?

El uso de la función de ordenación no funciona como se ve en este ejemplo:

var myArray = [1,4,5,3,2]; myArray.sort ( function( a , b ){ return b>a }); for ( var i = 0; i < myArray.length; i++ ) { document.write( myArray[i] ) }

Salida de Firefox / IE / Opera / Safri: 54321

Salida de Chrome: 53241

Ejemplo jsBin

¡Gracias por tu tiempo!


El comportamiento de Chrome es correcto :)

Los estándares ECMA requieren que la función se pase a sort () para devolver un número mayor que 0, menor que 0 o igual a 0. Sin embargo, la función que ha definido devuelve verdadero / falso. Las normas ECMA establecen que para una función que no se comporta como se espera, la implementación depende del cliente.

Lee esto



Debido a lo que cubre el estándar ECMA sobre las matrices de ordenación (de una manera muy simplificada):

  • Si en la comparación recibe 1 A, desciende una posición.
  • Si recibe -1, mantenga la posición y defina 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 objetos primitivos es posible usar la versión corta

// descending order abc.sort(function( a , b ){ return b - a; }); // ascending order abc.sort(function( a , b ){ return a - b; });

para 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 }

El camino correcto 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.