Ordenar y Revertir el Orden de los Arreglos

javascript

🔄 reverse(): Invirtiendo el Orden

El método reverse() es simple: invierte el orden de los elementos en el arreglo. El primer elemento pasa a ser el último, el segundo pasa a ser el penúltimo, y así sucesivamente.

Importante: reverse() modifica el arreglo original y también devuelve una referencia a ese mismo arreglo modificado.

let numeros = [1, 2, 3, 4, 5];
console.log("Original:", numeros);
numeros.reverse(); // Invierte el arreglo
console.log("Revertido:", numeros); // Muestra [5, 4, 3, 2, 1]
let letras = ["a", "b", "c"];
letras.reverse();
console.log(letras); // Muestra ['c', 'b', 'a']

sort(): Ordenando Elementos

El método sort() ordena los elementos de un arreglo en su lugar (modifica el original) y devuelve una referencia al arreglo ordenado.

Comportamiento por Defecto (Orden Alfabético/Unicode)

Si llamas a sort() sin argumentos, convierte los elementos a strings y los ordena según sus valores de puntos de código Unicode (similar al orden alfabético).

let frutas = ["Banana", "Manzana", "Naranja", "Fresa"];
frutas.sort();
console.log(frutas); // Muestra ["Banana", "Fresa", "Manzana", "Naranja"]
let mezcla = ["Gato", "perro", "AVE", "pez"]; // Ojo con mayúsculas/minúsculas
mezcla.sort();
console.log(mezcla); // Muestra ["AVE", "Gato", "pez", "perro"]
// (Las mayúsculas suelen ir antes que las minúsculas en Unicode)
AVISO

⚠️ ¡El ordenamiento por defecto no funciona bien para números! Los convierte a strings y los ordena alfabéticamente.

let numerosDesordenados = [10, 5, 100, 2, 25];
numerosDesordenados.sort();
console.log(numerosDesordenados); // Muestra [10, 100, 2, 25, 5] (¡Incorrecto! "100" va antes que "2")

Ordenar Números: La Función de Comparación

Para ordenar números (o cualquier cosa que no sea un simple orden alfabético), debemos pasarle a sort() una función de comparación. Esta función recibe dos argumentos (a y b), que representan dos elementos del arreglo que se están comparando.

La función debe devolver:

  • Un número negativo si a debe ir antes que b.
  • Un número positivo si a debe ir después que b.
  • 0 si a y b son considerados iguales en orden.

Para ordenar números de menor a mayor, la función es simple: (a, b) => a - b.

let numerosParaOrdenar = [10, 5, 100, 2, 25];
// Ordenar de menor a mayor
numerosParaOrdenar.sort((a, b) => a - b);
console.log(numerosParaOrdenar); // Muestra [2, 5, 10, 25, 100]

¿Cómo funciona a - b?

  • Si a es menor que b, a - b es negativo (a va antes).
  • Si a es mayor que b, a - b es positivo (a va después).
  • Si son iguales, a - b es 0 (orden relativo no cambia).

Para ordenar de mayor a menor, simplemente invertimos la resta: (a, b) => b - a.

// Ordenar de mayor a menor
numerosParaOrdenar.sort((a, b) => b - a);
console.log(numerosParaOrdenar); // Muestra [100, 25, 10, 5, 2]

Ordenar Objetos

Podemos usar la función de comparación para ordenar arreglos de objetos basándonos en alguna de sus propiedades.

let productos = [
{ nombre: "Laptop", precio: 1200 },
{ nombre: "Teclado", precio: 75 },
{ nombre: "Monitor", precio: 300 },
];
// Ordenar por precio (menor a mayor)
productos.sort((a, b) => a.precio - b.precio);
console.log(productos);
/* Muestra:
[
{ nombre: "Teclado", precio: 75 },
{ nombre: "Monitor", precio: 300 },
{ nombre: "Laptop", precio: 1200 }
]
*/
// Ordenar por nombre (alfabético)
productos.sort((a, b) => {
if (a.nombre < b.nombre) return -1;
if (a.nombre > b.nombre) return 1;
return 0;
});
console.log(productos);
/* Muestra:
[
{ nombre: "Laptop", precio: 1200 },
{ nombre: "Monitor", precio: 300 },
{ nombre: "Teclado", precio: 75 }
]
*/
CUIDADO

🔥 Tanto sort() como reverse() modifican el arreglo original. Si necesitas conservar el original, crea una copia primero (usando slice() o ...) y luego ordena o revierte la copia.

let original = [3, 1, 4];
let copiaOrdenada = [...original].sort((a, b) => a - b); // Ordena la copia
console.log(original); // Muestra [3, 1, 4]
console.log(copiaOrdenada); // Muestra [1, 3, 4]

☝️🤓
🏋️‍♂️ Ejercicio
  1. Crea un arreglo puntuaciones = [88, 95, 72, 100, 81].
  2. Ordena el arreglo puntuaciones de mayor a menor.
  3. Muestra el arreglo ordenado por consola.
  4. Ahora, revierte el orden del arreglo ya ordenado.
  5. Muestra el arreglo revertido por consola. ¿En qué orden quedaron las puntuaciones?
🏋️‍♂️ Ejercicio

Dado el arreglo de objetos: let estudiantes = [{ nombre: "Eva", edad: 20 }, { nombre: "Carlos", edad: 22 }, { nombre: "Ana", edad: 19 }];

  1. Ordena el arreglo estudiantes por edad, de menor a mayor.
  2. Muestra el resultado por consola.
  3. Ahora, ordena el arreglo estudiantes por nombre, alfabéticamente.
  4. Muestra el resultado por consola.
🚀 Extra

Investiga sobre:

  1. El método localeCompare() para strings. ¿Cómo podrías usarlo dentro de la función de comparación de sort() para ordenar strings de forma más robusta, considerando acentos o caracteres especiales según el idioma?
  2. ¿Qué es un “orden estable” (stable sort)? ¿El método sort() de JavaScript garantiza un orden estable en todos los navegadores/entornos?
  3. Los métodos más nuevos toSorted() y toReversed(). ¿Qué ventaja ofrecen sobre sort() y reverse()?

Comentarios

Artículos relacionados

javascript

Arreglos - Métodos de iteración

3 mins
javascript

Aplanar Arreglos Anidados: flat() y flatMap()

4 mins