martes, 30 de julio de 2013

Ordenar array numérico con Javascript

En Javascript la ordenación de arrays se realiza con el método array.sort(). Sin embargo, esta ordenación es lexicográfica y alfanumérica, con lo que si deseamos ordenar un array numérico tendremos problemas. Veamos este ejemplo:
var myarray = [40,100,1,5,25,10];
myarray.sort(); //La función devuelve [1,10,100,25,40,5]

Lo mismo ocurre si intentamos ordenar de forma descendente, ya que primero deberíamos ordenar ascendentemente con el método array.sort() y después invertir el resultado con el método array.reverse(). Al venir ya incorrecta la ordenación ascendente, el método reverse() simplemente nos imprimiría [5,40,25,100,10,1].

Para solucionar estos problemas es muy sencillo. Simplemente pasamos una función como argumento del método sort() y ya tenemos el array numérico ordenado ascendentemente:
var myarray = [40,100,1,5,25,10];
myarray.sort(function(a,b){return a - b}); //La función devuelve [1,5,10,25,40,100]

Para ordenar descendentemente podríamos usar el método reverse() sobre el resultado anterior o invertir la resta de los parámetros de la función que usamos dentro del sort() de la siguiente forma:
var myarray = [40,100,1,5,25,10];
myarray.sort(function(a,b){return b - a}); //La función devuelve [100,40,25,10,5,1]

No hay comentarios:

Publicar un comentario