Tengo un problema cuando ordeno una serie de matrices como esta:
let number = '72 65 73 78 75 74 90 81 87 65 55 69 72 78 79 91 100 40 67 77 86'; let numberArray = number.split(' '); let sortedNumber = numberArray.sort().map(Number); console.log(sortedNumber);regresará
[100, 40, 55, 65, 65, 67, 69, 72, 72, 73, 74, 75, 77, 78, 78, 79, 81, 86, 87, 90, 91]¿Por qué se muestran 100 en el primer índice? ¿Y cómo hacer que sea el último?
Prueba esto...
let number = '72 65 73 78 75 74 90 81 87 65 55 69 72 78 79 91 100 40 67 77 86'; let numberArray = number.split(' '); numberArray.sort(function(a, b) { return a - b; }); console.log(numberArray)Está tratando de ordenar alfabéticamente... esto se ordenará como un valor numérico
Puede cambiar el algoritmo como:
1) convertir string a string array de cadena
number.split(" ") 2) mapa sobre la matriz de string para convertirla en una matriz de numbers
numberArray.map(Number) 3) pass the custom comparator function in the sort method
.sort((a, b) => a - b)Nota: Puede hacerlo de una sola línea como
let sortedNumber = number.split(" ").map(Number).sort((a, b) => a - b);
let number = "72 65 73 78 75 74 90 81 87 65 55 69 72 78 79 91 100 40 67 77 86"; let numberArray = number.split(" "); let sortedNumber = numberArray.map(Number).sort((a, b) => a - b); console.log(sortedNumber); /* This is not a part of answer. It is just to give the output full height. So IGNORE IT */ .as-console-wrapper { max-height: 100% !important; top: 0; }