Miniatura del tutorial de Ordenar arrays

Ordenar arrays en JavaScript: números, texto y objetos

Para ordenar arrays en JavaScript utiliza sort con una función de comparación adecuada. Si quieres conservar la lista original, trabaja con una copia o utiliza toSorted en entornos compatibles.

El error más habitual consiste en ordenar números sin comparador. El orden predeterminado convierte los valores a cadenas y no corresponde necesariamente al orden numérico.

Ordenar números de menor a mayor

const numeros = [10, 2, 30, 1];
const ordenados = [...numeros].sort((a, b) => a - b);
console.log(ordenados); // [1, 2, 10, 30]
console.log(numeros); // [10, 2, 30, 1]

Un resultado negativo coloca a antes que b; uno positivo lo coloca después; cero indica equivalencia para esa comparación. Para ordenar de mayor a menor, utiliza b menos a.

Sort modifica el array original

const precios = [20, 5, 12];
const resultado = precios.sort((a, b) => a - b);
console.log(resultado === precios); // true

La referencia devuelta es la misma. La copia con spread del ejemplo anterior evita reorganizar el array original, pero sigue siendo una copia superficial: no duplica profundamente los objetos que pueda contener.

Cómo utilizar toSorted

const edades = [32, 18, 27];
const ordenadas = edades.toSorted((a, b) => a - b);
console.log(ordenadas); // [18, 27, 32]

ToSorted devuelve un array nuevo sin reordenar el original. Comprueba que los navegadores o runtimes de tu proyecto lo admiten; para entornos que no lo tengan, copiar y después aplicar sort puede cubrir este caso básico.

Ordenar texto en español

const nombres = ["Óscar", "Ana", "Álvaro"];
const comparador = new Intl.Collator("es", { sensitivity: "base" });
const alfabeticos = [...nombres].sort(comparador.compare);
console.log(alfabeticos); // ["Álvaro", "Ana", "Óscar"]

Intl.Collator permite comparar según reglas locales. Sensitivity base reduce ciertas distinciones de acentos y mayúsculas según el idioma; elige las opciones según el comportamiento que necesite tu lista.

No bases una clasificación alfabética humana exclusivamente en comparar códigos de caracteres si necesitas reglas lingüísticas.

Ordenar objetos por una propiedad

const productos = [
  { nombre: "Cuaderno", precio: 8 },
  { nombre: "Mochila", precio: 30 },
  { nombre: "Lápiz", precio: 2 }
];

const porPrecio = [...productos].sort((a, b) => a.precio - b.precio);
console.log(porPrecio.map(p => p.nombre));
// ["Lápiz", "Cuaderno", "Mochila"]

El ejemplo presupone precios numéricos finitos. Si llegan de una API como cadenas, convierte y valida los datos antes de ordenar. No dejes que NaN o propiedades ausentes determinen el resultado de forma accidental.

Cómo añadir un segundo criterio

const porPrecioYNombre = [...productos].sort((a, b) =>
  (a.precio - b.precio) || comparador.compare(a.nombre, b.nombre)
);

Cuando los precios coinciden, se compara el nombre. Una función de comparación debe ser coherente: devolver solamente true o false no expresa correctamente los tres resultados posibles.

Preguntas frecuentes

¿Sort devuelve un array nuevo?

No. Modifica y devuelve el mismo array. Usa una copia o toSorted si necesitas conservarlo.

¿Puedo usar sort para mezclar al azar?

Un comparador basado en Math.random no ofrece un barajado uniforme ni coherente. Utiliza un algoritmo adecuado para esa tarea.

Prueba con valores repetidos y listas vacías. Para mostrar los resultados en pantalla, consulta la manipulación del DOM.

Referencia técnica: documentación de MDN.

Deja un comentario

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

logo mastercode pro
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.

Puedes ver mas detalle en nuestra pagina de privcidad