Ordenar y desordenar un array de json en Javascript

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}

 

Redes sociables

    Deja un comentario

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    *