Arreglos - Métodos de iteración
Ordenar y Revertir el Orden de los Arreglos
🔄 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úsculasmezcla.sort();console.log(mezcla); // Muestra ["AVE", "Gato", "pez", "perro"]// (Las mayúsculas suelen ir antes que las minúsculas en Unicode)
⚠️ ¡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 queb
. - Un número positivo si
a
debe ir después queb
. 0
sia
yb
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 mayornumerosParaOrdenar.sort((a, b) => a - b);console.log(numerosParaOrdenar); // Muestra [2, 5, 10, 25, 100]
¿Cómo funciona a - b
?
- Si
a
es menor queb
,a - b
es negativo (a
va antes). - Si
a
es mayor queb
,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 menornumerosParaOrdenar.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 }]*/
🔥 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
- Crea un arreglo
puntuaciones = [88, 95, 72, 100, 81]
. - Ordena el arreglo
puntuaciones
de mayor a menor. - Muestra el arreglo ordenado por consola.
- Ahora, revierte el orden del arreglo ya ordenado.
- 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 }];
- Ordena el arreglo
estudiantes
por edad, de menor a mayor. - Muestra el resultado por consola.
- Ahora, ordena el arreglo
estudiantes
por nombre, alfabéticamente. - Muestra el resultado por consola.
🚀 Extra
Investiga sobre:
- El método
localeCompare()
para strings. ¿Cómo podrías usarlo dentro de la función de comparación desort()
para ordenar strings de forma más robusta, considerando acentos o caracteres especiales según el idioma? - ¿Qué es un “orden estable” (stable sort)? ¿El método
sort()
de JavaScript garantiza un orden estable en todos los navegadores/entornos? - Los métodos más nuevos
toSorted()
ytoReversed()
. ¿Qué ventaja ofrecen sobresort()
yreverse()
?