Déjame ejemplificar.
Aporte:
Tengo una matriz de 2 dimensiones:
arr = [['13.12', 'www.randomLinkHere.com'], ['13.6', 'www.randomLinkHere.com'], ['13.2', 'www.randomLinkHere.com']]
Y quiero ordenarlos según la primera columna => arr[i][0].
Pero cuando los clasifico usando la función de comparación simple (a - b), devuelve algo como:
salida: [['13.12', 'www.randomLinkHere.com'], ['13.2', 'www.randomLinkHere.com'], ['13.6', 'www.randomLinkHere.com']]
Pero el resultado esperado debe ser:
'versión ordenada' esperada: [['13.2', 'www.randomLinkHere.com'], ['13.6', 'www.randomLinkHere.com'], ['13.12', 'www.randomLinkHere.com']]
Como si fuera un objeto.
Referencia: resultado esperado como referencia
const arr = [ ['13.12', 'www.randomLinkHere.com'], ['13.6', 'www.randomLinkHere.com'], ['13.2', 'www.randomLinkHere.com'], ]; const sortArr = (arr) => { return arr.sort((a, b) => { if (+a[0] > +b[0]) return 1; return 0; }).reverse(); }; console.log(sortArr(arr));Una versión que debería permitir longitudes algo arbitrarias de números de versión:
const arr = [ ["13.12", "www.randomLinkHere.com"], ["13.6", "www.randomLinkHere.com"], ["13.2", "www.randomLinkHere.com"], ["14.1", "www.randomLinkHere.com"], ["13.110", "www.randomLinkHere.com"], ["13.11.3", "www.randomLinkHere.com"], ["13.1090.3", "www.randomLinkHere.com"], ]; const compare_versions = (a, b) => { const a_parts = a.split('.'); const b_parts = b.split('.'); for(let i = 0; i < Math.max(a_parts.length, b_parts.length); i++) { let comp = +(a_parts[i] ?? 0) - +(b_parts[i] ?? 0); if(comp !== 0) return comp; } return 0; }; const sortedArr = arr.sort(([a], [b]) => compare_versions(a, b)); console.log(sortedArr); const arr = [ ["13.12", "www.randomLinkHere.com"], ["14.1", "www.randomLinkHere.com"], ["15.1", "www.randomLinkHere.com"], ["15.3", "www.randomLinkHere.com"], ["16.2", "www.randomLinkHere.com"], ["13.2", "www.randomLinkHere.com"], ["13.13", "www.randomLinkHere.com"], ["13.113", "www.randomLinkHere.com"], ["1.2", "www.randomLinkHere.com"], ["2.2", "www.randomLinkHere.com"], ["125.2", "www.randomLinkHere.com"], ]; const sortedArr = arr.sort( (a, b) => a[0].split(".").reduce((acc, val) => acc * 10000 + parseFloat(val), 0) - b[0].split(".").reduce((acc, val) => acc * 10000 + parseFloat(val), 0) ); console.log(sortedArr);