tengo una matriz:
[ 'B3', 'B4', 'B5', 'B6', 'C3', 'C4', 'C5', 'C6', 'D3', 'D4', 'D5', 'D6' ]Necesito ordenarlo por el número en cada cadena (en orden ascendente). El número puede ser de uno/doble dígito/triple dígito.
Así es como debería verse la matriz final:
[ 'B3', 'C3', 'D3', 'B4', 'C4', 'D4', 'B5', 'C5', 'D5', 'B6', 'C6', 'D6' ]¿Cómo puedo hacerlo?
Suponiendo que siempre habrá una sola letra al principio, aquí está la solución:
const input = [ 'B3', 'B4', 'B5', 'B6', 'C3', 'C4', 'C5', 'C645', 'D3', 'D4', 'D532', 'D6' ]; console.log(sort(input)); function sort(array) { return array.sort((a, b) => { const aVal = parseInt(a.slice(1), 10); const bVal = parseInt(b.slice(1), 10); if (aVal < bVal) { return -1; } if (aVal > bVal) { return 1; } return 0; }); }Puede echar un vistazo al método de clasificación: https://www.w3schools.com/jsref/jsref_sort.asp
Y cómo puede pasar una función para la comparación de valores como criterio para ordenar los elementos :)
const myArray = [ 'B3', 'B4', 'B5', 'B6', 'C3', 'C4', 'C5', 'C6', 'D3', 'D4', 'D5', 'D6' ] const sortedArray = myArray.sort((a, b) => a[1] - b[1]) console.log(sortedArray)Puede usar el método de sort de la matriz con la función de comparación personalizada como:
const arr = [ 'B3', 'B4', 'B5', 'B6', 'C3', 'C4', 'C5', 'C6', 'D3', 'D4', 'D5', 'D6', ]; const result = arr.sort((a, b) => +a.match(/\d+/) - +b.match(/\d+/)); console.log(result); /* 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; }