hoy estaba escribiendo algo de código y me di cuenta de que no puedo hacer x.push(5, 9).sort(); //wrong ni puedo hacer x.sort(x.push(5, 9)); //wrong y tenía que hacer
x.push(5, 9); x.sort();Me preguntaba si no hay forma de que sea una sola línea.> Además, ¿cuál es la diferencia entre las dos líneas a continuación?
x.sort((a, b) => a - b); x.sort();.push devuelve la nueva longitud de la matriz, no la matriz mutada. Si desea empujar y ordenar al mismo tiempo, considere crear una nueva matriz y luego ordenarla.
const sortedArr = [...arr, 5, 9].sort(); // or, .sort((a, b) => a - b) .sort() sin ningún argumento ordena cada elemento de la matriz comparándolos lexiográficamente, como cadenas, lo que da como resultado resultados poco intuitivos como [1, 11, 2] .
Una devolución de llamada personalizada le permite personalizar el comportamiento: cuando un elemento de una matriz se compara con otro, en lugar de usar la comparación lexiográfica, se invoca la devolución de llamada y si el valor de retorno es negativo, positivo o 0 determina si los dos elementos se obtienen. ordenadas antes, después o en la misma posición (relativa) a la otra. Entonces, al ordenar una matriz de números numéricamente, siempre querrás usar algo como (a, b) => a - b .
Otra forma de empujar y ordenar en una línea es usar concat para crear una nueva matriz que luego se puede ordenar:
const arr = [1, 6, 10] const sortedArr = arr.concat([5, 9]).sort((a, b) => a - b) console.log(sortedArr)Como @CertainPerformance ya ha señalado, debe usar una devolución de llamada para ordenar correctamente los valores numéricos, ya que la ordenación de cadenas de números produce resultados incorrectos.