German Cavani
Darwing Steven Sánchez Londoño
Gente que le pone el alma <3
Henry Jeffersson Salinas Arenas
ty
El método sort es mutable y consiste en ordenar un array a partir de los valores Unicode de los caracteres y este retorna un array con la misma referencia en memoria que el original.
Este proceso recibe un argumento:
let sortedArray = array.sort(function())
La función comparativa, que recibe como argumento el método sort, utiliza dos parámetros:
array.sort(function(first, second))
Si la función comparativa retorna un número mayor que 0, entonces el primer elemento se sitúa antes que el segundo. Si es menor que 0, entonces el segundo elemento se sitúa antes que el primero. Esto es importante, ya que ordenar los elementos por el valor Unicode provoca resultados inesperados.
Ordenamiento de palabras
Si ordenas un array de palabras, puede ordenar correctamente por el valor Unicode de los caracteres de la palabra. Sin embargo, en algunos navegadores o entornos de ejecución (como Node) puede que esto falle, por lo tanto, debes utilizar la función localeCompare.
Ten en cuenta que las mayúsculas, minúsculas y caracteres con tilde tienen un valor Unicode diferente, por lo que debes asegurarte que todas las palabras estén en la misma condición.
const words = [ "réservé", "premier", "communiqué", "café", "adieu", "éclair", "banana", ] words.sort((a,b) => a.localeCompare(b)) // [ 'adieu', 'banana', 'café', 'communiqué', 'éclair', 'premier', 'réservé' ]
Ordenamiento de números
Si ordenas un array de números, provoca un ordenamiento inesperado porque ordena por el valor Unicode de los caracteres del número.
const numbers = [1, 30, 4, 21, 100000] numbers.sort() console.log(numbers) // [ 1, 100000, 21, 30, 4 ]
Para arreglar este comportamiento, es necesario utilizar la siguiente función comparativa:
(a, b) => a - b(a, b) => b - a// Ascendente const numbers = [1, 30, 4, 21, 100000] numbers.sort((a,b) => a - b) console.log(numbers) // [ 1, 4, 21, 30, 100000 ] // Descendente const numbers = [1, 30, 4, 21, 100000] numbers.sort((a,b) => b - a) console.log(numbers) // [ 100000, 30, 21, 4, 1 ]
Ordenamiento de objetos por su propiedad
A partir de la función comparativa puedes ordenar los elementos de cualquier forma. Cuando necesites ordenar un array de objetos, compara una propiedad de tipo numérica de la misma forma que el ordenamiento de números, ya sea de manera descendente o ascendente.
const orders = [ { customerName: "Nicolas", total: 600, delivered: true, }, { customerName: "Zulema", total: 120, delivered: false, }, { customerName: "Santiago", total: 1840, delivered: true, }, { customerName: "Valentina", total: 240, delivered: true, }, ]
Por ejemplo, creemos un algoritmo que ordene los pedidos del array orders por su valor total.
orders.sort((a,b) => a.total - b.total) console.log(orders) /* [ { customerName: 'Zulema', total: 120, delivered: false }, { customerName: 'Valentina', total: 240, delivered: true }, { customerName: 'Nicolas', total: 600, delivered: true }, { customerName: 'Santiago', total: 1840, delivered: true } ] */
Contribución creada por: Andrés Guano.
German Cavani
Darwing Steven Sánchez Londoño
Gente que le pone el alma <3
Henry Jeffersson Salinas Arenas
ty
Luis Manuel Morales López
Ludwig Jonathan Perez Villamar
Geovanny Sneyder Paez Pabon
Sebastian Moreno Olivera
Brandon James Huamán Mallcco
bastante simple 👍
Arnobi Zabaleta Caldera
Para ordenarlo de la fecha más reciente a la más antigua es todo lo contrario en el sort.
orders.sort((a,b) => b.date - a.date);
Luis Abdel Rangel Castro
Cesar Gabriel Mejias Farreras
Que seria el getTime()?
Joel Moises Boada Velasquez
RETO: usando .getTime() en la fecha
orders.sort((a, b) => b.date.getTime() - a.date.getTime()); console.log(orders);
Ricardo Rito Anguiano
Elioenai Garcia
Mi solución al reto:
const orders = [ { customerName: "Nicolas", total: 600, delivered: true, datePurchased: '2021-10-28 12:00:00' }, { customerName: "Zulema", total: 120, delivered: false, datePurchased: '2021-10-29 12:00:00' }, { customerName: "Santiago", total: 1840, delivered: true, datePurchased: '2021-10-30 12:00:00' }, { customerName: "Valentina", total: 240, delivered: true, datePurchased: '2021-10-31 12:00:00' }, ]; orders.sort((a,b) => new Date(b.datePurchased) - new Date(a.datePurchased)); console.log(orders);
Luis Guilermo Figueroa Hernandez
mi solución del reto 🤗🤗🤗:
Comparar fechas JS
Miguel Angel Reyes Moreno
Diego Zazueta
function randomDate(start, end) { return new Date( start.getTime() + Math.random() * (end.getTime() - start.getTime()) ); } const startDate = new Date(2000, 0, 1); const endDate = new Date(2023, 11, 31); const orders2 = orders .map((item) => { return { ...item, ...{ fecha: randomDate(startDate, endDate)} }; }) .sort((a,b) => a.fecha.getTime() - b.fecha.getTime()); console.log(orders2);
Laura Roa
Como se resuelve el orden de los meses, es posible hacerlo con sort?
Nicolas Molina
ProfesorHola, con los meses la solución es ponerles un valor, ya que si tenemos los meses como strings no lo podríamos ordenar necesitamos asignar que si es enero sea igual a 1 o si es por ejemplo diciembre sea 12 entonces podrías validar el texto de cada mes y asignarle un número luego que tengas un número asignado a cada mes sería ordenarlo con sort.
Rodrigo Josue Goitia Quiroga
Para solucionar el reto de la fecha más reciente a la más antigua me bastó con usar la propiedad date con una resta. Vi que otros llegaron a diferentes soluciones usando métodos de Date. Existe alguna diferencia en performance o se debería usar estos métodos en casos específicos?
Nicolas Molina
ProfesorHola, basta con restar las dos fechas de esta manera dateA - dateB 😎 aunque usar el getTime en algunos casos puede ser útil.
Ever Lizarraga
RETO:
const orders = [ { customerName: "Nicolas", total: 600, delivered: true, fecha: new Date('2024-01-02'), }, { customerName: "Zulema", total: 120, delivered: false, fecha: new Date('2023-01-02'), }, { customerName: "Santiago", total: 1840, delivered: true, fecha: new Date('2024-01-04'), }, { customerName: "Valentina", total: 240, delivered: true, fecha: new Date('2023-12-26'), }, ]; orders.sort((a,b) => a.fecha - b.fecha); console.log(orders);
Lucas Aguirre
En el min 4:37 aplica método sort, y obtiene el siguiente resultado:
const words = [ "réservé", "premier", "communiqué", "café", "adieu", "éclair", "banana" ];
words.sort()
const words = [ "adieu", "banana", "café", "communiqué", "premier", "réservé", "éclair" ];
pero con:
words.sort((a,b) => a.localeCompare(b))
No se obtiene el mismo resultado anterior, como el profe menciona en el min 5:20, hay una diferencia, y es que ahora si, lo ordena bien alfabéticamente, con la primera letra de cada palabra.
const words = [ "adieu", "banana", "café", "communiqué", "éclair", "premier", "réservé" ];
Antonio Rafael González Ferrer
Orangel Gonzalez
Para ordenar los meses por su orden correspondiente 📅
const months = [ { mes: "March", id: 03, }, { mes: "Jan", id: 01, }, { mes: "Feb", id: 02, }, { mes: "Dec", id: 12, }, ]; const meses = months.sort((a, b) => a.id - b.id).map((item) => item.mes); console.log(meses);
Omar Barragán moreno
const orders = [ { customerName: "Nicolas", total: 600, delivered: true, datePurchased: "2022-01-12 12:00:00", }, { customerName: "Zulema", total: 120, delivered: false, datePurchased: "2022-01-20 12:00:00", }, { customerName: "Santiago", total: 1840, delivered: true, datePurchased: "2022-01-01 12:00:00", }, { customerName: "Valentina", total: 240, delivered: true, datePurchased: "2022-01-15 12:00:00", }, ]; orders.sort((a, b) => new Date(b.datePurchased) - new Date(a.datePurchased)); console.log(orders);
Jefred Bedoya
El método .sort() en JavaScript
Estrategias de ordenamiento
(a, b) => a - b para ordenar de menor a mayor, o b - a para el inverso.localeCompare para asegurar un orden alfabético correcto según el idioma.(a, b) => a.atributo - b.atributo.Daniel Flores
🔀 Ordenar con sort() (mutable)
🧠 ¿Qué hace? Ordena los elementos del array modificando el original ⚠️ Por defecto, usa valores Unicode, lo que puede generar resultados inesperados.
✅ Devuelve el mismo array ya ordenado ⚠️ Es mutable: cambia el array original 🧨
📥 Sintaxis:
jsCopiarEditararray.sort((a, b) => comparación);
🔤 Ejemplo con palabras (Unicode y localeCompare):
jsCopiarEditarconst palabras = ["réservé", "premier", "communiqué", "café", "adieu", "éclair", "banana"];
palabras.sort((a, b) => a.localeCompare(b));
// ['adieu', 'banana', 'café', 'communiqué', 'éclair', 'premier', 'réservé']
📌 Tips para texto:
.localeCompare() para evitar errores con acentos y mayúsculas/minúsculas🔢 Ejemplo con números:
❌ Mal orden:
jsCopiarEditar[1, 30, 4, 21].sort();
// Resultado inesperado: [1, 100000, 21, 30, 4]
✅ Correcto:
jsCopiarEditar// Ascendente
numbers.sort((a, b) => a - b);
// Descendente
numbers.sort((a, b) => b - a);
📦 Ordenar objetos por propiedad:
jsCopiarEditarorders.sort((a, b) => a.total - b.total);
// Ordena por el total de cada pedido (ascendente)
🧾 Resultado:
jsCopiarEditar[
{ customerName: 'Zulema', total: 120 },
{ customerName: 'Valentina', total: 240 },
{ customerName: 'Nicolas', total: 600 },
{ customerName: 'Santiago', total: 1840 }
]
📌 Tips clave:
sort() modifica el array originalslice() o spread (...) si no quieres mutarloLes dejo los arrays para que no tengan que escribir:
const months = ["March", "Jan", "Feb", "Dec"]; const numbers = [1, 30, 4, 21, 100000]; const words = [ "réservé", "premier", "communiqué", "café", "adieu", "éclair", "banana", ]; const orders = [ { customerName: "Nicolas", total: 600, delivered: true, }, { customerName: "Zulema", total: 120, delivered: false, }, { customerName: "Santiago", total: 1840, delivered: true, }, { customerName: "Valentina", total: 240, delivered: true, }, ];
Para ordenar los meses
Creé una función que le de un valor numérico a cada mes y luego le envié esa función a Sort:
const months = ['Febrero', 'Julio', "fsdf", 'Diciembre', 'Enero']; function monthValue(month) { switch (month.toUpperCase()) { case 'ENERO': return 1; case 'FEBRERO': return 2; case 'MARZO': return 3; case 'ABRIL': return 4; case 'MAYO': return 5; case 'JUNIO': return 6; case 'JULIO': return 7; case 'AGOSTO': return 8; case 'SEPTIEMBRE': return 9; case 'OCTUBRE': return 10; case 'NOVIEMBRE': return 11; case 'DICIEMBRE': return 12; default: //Cualquier valor que no coincida se irá de último return 13; } } months.sort((a, b) => monthValue(a) - monthValue(b)) console.log(months);
Resultado:
[ 'Enero', 'Febrero', 'Julio', 'Diciembre', 'fsdf' ]
Gracias a tu respuesta pude hacer esto, me faltaba ver como relacionar los números xD
const monthsObj = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", ]; function ordenarMes(months) { for (element of months) { return monthsObj.findIndex(element => element == months); } } months.sort( (a,b) => ordenarMes(a) - ordenarMes(b)); console.log('months Map', months );
yo cambie la función con el switch por una función con objeto, lo cual cada mes retornara un valor diferente.
<code>const months = ["Marzo", "Junio", "Febrero", "diciembre"]; const valueMeses= mes =>{ const mesMyus = mes.toUpperCase(); const meses= { ENERO: 1, FEBRERO:2, MARZO:3, ABRIL:4, MAYO:5, JUNIO:6, JULIO: 7, AGOSTO:8, SEPTIEMBRE:9, OBTUBRE:10, NOVIEMBRE:11, DICIEMBRE:12, } return meses[mesMyus] || undefined; } console.log(valueMeses('Enero')); months.sort((a,b)=>{ return valueMeses(a)-valueMeses(b); }); console.log(months)
Reto
const orders = [ { customerName: "Nicolas", total: 600, delivered: true, date: new Date (2021, 3, 8, 4), }, { customerName: "Zulema", total: 120, delivered: false, date: new Date (2021, 9, 12, 3), }, { customerName: "Santiago", total: 1840, delivered: true, date: new Date (2021, 8, 2, 2), }, { customerName: "Valentina", total: 240, delivered: true, date: new Date(2021, 1, 1, 9, 30), }, ]; orders.sort((a,b) => a.date - b.date); console.log(orders);
console.clear(); const months = ['March', 'Jan', 'Feb', 'Dec']; const numbers = [1, 30, 4, 21, 100000]; const words = ['réservé', 'premier', 'communiqué', 'café', 'adieu', 'éclair', 'banana']; const orders = [ { customerName: 'Nicolas', total: 600, delivered: true, date: new Date(2021, 1, 1, 15), }, { customerName: 'Zulema', total: 120, delivered: false, date: new Date(2021, 1, 1, 10), }, { customerName: 'Santiago', total: 1840, delivered: true, date: new Date(2021, 1, 1, 20), }, { customerName: 'Valentina', total: 240, delivered: true, date: new Date(2021, 1, 1, 8), }, ]; months.sort(); console.log({ months }); numbers.sort(); console.log({ numbers }); numbers.sort((a, b) => a - b); console.log({ numbers }); numbers.sort((a, b) => b - a); console.log({ numbers }); words.sort(); console.log({ words }); words.sort((a, b) => a.localeCompare(b)); console.log({ words }); orders.sort((a, b) => a.total - b.total); console.log({ orders }); orders.sort((a, b) => b.total - a.total); console.log({ orders }); orders.sort((a, b) => b.date.getTime() - a.date.getTime()); console.log({ orders });
Reto izi pizi jajaja que gran curso!
const orders = [ { customerName: 'Nicolas', total: 600, delivered: true, date: new Date(2021, 1, 1, 15), }, { customerName: 'Zulema', total: 120, delivered: false, date: new Date(2021, 1, 1, 10), }, { customerName: 'Santiago', total: 1840, delivered: true, date: new Date(2021, 1, 1, 20), }, { customerName: 'Valentina', total: 240, delivered: true, date: new Date(2021, 1, 1, 8), }, ]; const ordersSorted = orders.sort((a, b) => { return a.date.getTime() - b.date.getTime(); }); console.log(ordersSorted);
Para ordenar por fechas es tan simple como usar el nombre del objeto y su propiedad date.
const orders = [ { customerName: "Nicolas", total: 600, delivered: true, date: new Date(2019, 0, 2), }, { customerName: "Zulema", total: 120, delivered: false, date: new Date(2019, 10, 1), }, { customerName: "Santiago", total: 1840, delivered: true, date: new Date(2020, 4, 1), }, { customerName: "Valentina", total: 240, delivered: true, date: new Date(2021, 3, 6) }, ]; console.log(orders.sort((a, b) => b.total - a.total)); console.log(orders.sort((a,b) => b.date - a.date));
Mi respuesta al reto:
const ordersWDate = [ { customerName: "Nicolas", total: 600, delivered: true, date: new Date(2022, 1, 14, 15, 45) }, { customerName: "Zulema", total: 120, delivered: false, date: new Date(2021, 11, 18, 18) }, { customerName: "Santiago", total: 1840, delivered: true, date: new Date(2021, 11, 24, 20, 30) }, { customerName: "Valentina", total: 240, delivered: true, date: new Date(2022, 0, 18, 14, 15) }, ]; ordersWDate.sort((a, b) => b.date - a.date) console.log(ordersWDate)