Si repasamos un poco la forma de ordenar arrays en Javascript, podemos usar el método sort() para hacerlo de forma ascendente. Por ejemplo Si tuviéramos un array con el siguiente formato:
var nombres = ['Carlos', 'Yolanda', 'Ana', 'Mariano'];
Lo mostramos por consola:
console.log(nombres);
El resultado sería:
["Carlos", "Yolanda", "Ana", "Mariano"]
Lo ordenamos con sort():
nombres.sort(); console.log(nombres);
Y ahora veríamos:
["Ana", "Carlos", "Mariano", "Yolanda"]
Si lo que queremos hacer es ordenarlo, pero de forma descendente, tenemos que combinar esto con el método reverse(), el cuál da vuelta las posiciones:
nombres.sort(); nombres.reverse(); console.log(nombres);
Esto nos devolverá:
["Yolanda", "Mariano", "Carlos", "Ana"]
Ordenando un array de json
Supongamos que tenemos un array con este aspecto:
var personas = [ {nombre: 'Alejandra', apellido: 'Quiroga', edad: 25}, {nombre: 'Jason', apellido: 'Ajax', edad: 33}, {nombre: 'Mauricio', apellido: 'Katze', edad: 58}, {nombre: 'José Luis', apellido: 'Rodríguez', edad: 74}, {nombre: 'Arya', apellido: 'Stark', edad: 9} ];
Necesitamos ordenarlo por una propiedad específica de un elemento. Para eso vamos a crear una función que reciba dos parámetros el array en cuestión, y el nombre de la propiedad:
function ordenarAsc(p_array_json, p_key) { p_array_json.sort(function (a, b) { return a[p_key] > b[p_key]; }); }
Por ejemplo, por el nombre de la persona:
ordenarAsc(personas, 'nombre'); console.log(personas);
Y el resultado será entonces:
{nombre: "Alejandra", apellido: "Quiroga", edad: 25} {nombre: "Arya", apellido: "Stark", edad: 9} {nombre: "Jason", apellido: "Ajax", edad: 33} {nombre: "José Luis", apellido: "Rodríguez", edad: 74} {nombre: "Mauricio", apellido: "Katze", edad: 58}
Ahora supongamos que queremos ordenar pero de forma descendente. Vamos a crear otra función con parámetros similares:
function ordenarDesc(p_array_json, p_key) { ordenarAsc(p_array_json, p_key); p_array_json.reverse(); }
Reutilizamos la función ordenarAsc() y luego invertimos los elementos. Si por ejemplo queremos ordenar, esta vez por la edad de las personas:
ordenarDesc(personas, 'edad'); console.log(personas);
El resultado va a ser:
{nombre: "José Luis", apellido: "Rodríguez", edad: 74} {nombre: "Mauricio", apellido: "Katze", edad: 58} {nombre: "Jason", apellido: "Ajax", edad: 33} {nombre: "Alejandra", apellido: "Quiroga", edad: 25} {nombre: "Arya", apellido: "Stark", edad: 9}