javascript - por - Array.sort() no ordena los números correctamente
sort json javascript (5)
He probado diferentes números, y siempre actúa como si los 0 no estuvieran allí y ordena los números correctamente de lo contrario. Alguien sabe por qué?
Obtiene un tipo lexicográfico (por ejemplo, convertir objetos en cadenas y ordenarlos en orden de diccionario), que es el comportamiento de clasificación predeterminado en Javascript:
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/sort
array.sort([compareFunction])
Parámetros
compararFunción
Especifica una función que define el orden de clasificación. Si se omite, la matriz se ordena lexicográficamente (en orden de diccionario) de acuerdo con la conversión de cadena de cada elemento.
En la especificación ECMAscript (la referencia normativa para el Javascript genérico), ECMA-262, 3ª ed. , sección 15.4.4.11, el orden de clasificación predeterminado es lexicográfico, aunque no salen y lo dicen, sino que dan los pasos para una función de clasificación conceptual que invoca la función de comparación dada si es necesario, de lo contrario comparan los argumentos cuando se convierten en cadenas :
13. If the argument comparefn is undefined, go to step 16.
14. Call comparefn with arguments x and y.
15. Return Result(14).
16. Call ToString(x).
17. Call ToString(y).
18. If Result(16) < Result(17), return −1.
19. If Result(16) > Result(17), return 1.
20. Return +0.
Esta pregunta ya tiene una respuesta aquí:
- Cómo ordenar una matriz de enteros correctamente 15 respuestas
En Chrome 14 y Firefox 5 (no se han probado otros navegadores), el siguiente código no ordena los números correctamente:
<script>
a = new Array();
a.push(10);
a.push(60);
a.push(20);
a.push(30);
a.push(100);
document.write(a.sort())
</script>
Devuelve 10,100,20,30,60
He probado diferentes números, y siempre actúa como si los 0 no estuvieran allí y ordena los números correctamente de lo contrario. Alguien sabe por qué?
El orden predeterminado para matrices en Javascript es una https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/sort . Si quieres un tipo numérico, prueba algo como esto:
var a = [ 1, 100, 50, 2, 5];
a.sort(function(a,b) { return a - b; });
Puedes usar una función de clasificación:
var myarray=[25, 8, 7, 41]
myarray.sort( function(a,b) { return b - a; } );
// 7 8 25 41
Mira http://www.javascriptkit.com/javatutors/arraysort.shtml
prueba esto:
a = new Array();
a.push(10);
a.push(60);
a.push(20);
a.push(30);
a.push(100);
a.sort(Test)
document.write(a);
function Test(a,b)
{
return a > b ? true : false;
}
a.sort(function(a,b){return a - b})
Estos pueden ser confusos ... revisa este enlace .