Publicado el 27.11.2021 a las 17:36
Comprende de una vez cómo funciona el método sort
El método sort es un método de ordenación que tienen los arrays en Javascript.
Si llamas al método sort directamente sobre un array, te darás cuenta que tiene un comportamiento esperado si el array contiene strings pero si el array contiene números lo devuelto por el método no es lo esperado.
Esto es lo que ocurriría con un array de strings:
const stringArray = ['Trek', 'Cube', 'Cannondale', 'Merida', 'specialized']; stringArray.sort(); console.log(stringArray); //[LOG]: ["Cannondale", "Cube", "Merida", "Trek", "Specialized"]
Esto es lo que ocurriría con un array de números:
const numberArray = [23, 1, 245, 33, 1523]; numberArray.sort(); console.log(numberArray); //[LOG]: [1, 1523, 23, 245, 33]
¿Por qué con strings lo hace bien pero con números no?
El motivo es que el método sort utiliza el valor unicode del elemento a ordenar. Es decir, que cuando quieres ordenar números el método sort lo interpreta como un string, por eso en el ejemplo el 1523 va delante del 23.
El método sort acepta una función de comparación que es opcional, y podemos usar esta función para pasarle toda la lógica que precisemos. A dicha función se le pasarán dos parámetros, normalmente a y b por convención y sobre esos dos parámetros ejecutaremos la función y devolveremos un número que podrá ser:
Lo vemos con el ejemplo anterior de los números:
const numberArray = [23, 1, 245, 33, 1523]; numberArray.sort((a,b)=>{ if(a===b) return 0; if(a>b) return -1; //para que a se situe delante de b if(a<b) return 1; //para que a se situe detrás de b }); console.log(numberArray); //[LOG]: [1, 23, 33, 245, 1523]
Ahora sí lo ha hecho bien.
Por motivos didácticos he escrito la lógica anterior, pero su puede simplificar a:
const numberArray = [23, 1, 245, 33, 1523]; numberArray.sort((a,b)=>{ return a-b; }); console.log(numberArray); //[LOG]: [1, 23, 33, 245, 1523]
Hasta luego 🖖