Tengo un rango de números de la siguiente manera:
const a = ["11-50", "2-10", "1", "51-200"]
Me gustaría ordenarlos correctamente como
["1", "2-10", "11-50", "51-200"]
He intentado estos dos métodos de ordenación en vano:
a.sort((a, b) => a - b)
a.sort()
Podemos intentar ordenar el número límite inferior en cada rango:
const input = ["11-50", "2-10", "1", "51-200"]; input.sort(function(a, b) { return parseInt(a.split("-")[0]) - parseInt(b.split("-")[0]); }); console.log(input);Un poco más formalmente, escriba un código para cambiar la representación de cadenas a números y viceversa...
const string2Range = string => string.split('-').map(parseInt); const range2String = range => `${range[0}-${range[1]}`;Defina qué hace que un rango sea más pequeño que otro...
// low value? const compLow = (rangeA, rangeB) => rangeA[0] - rangeB[0] // midpoint value? const midpoint = range => (range[1] - range[0]) / 2; const compMid = (rangeA, rangeB) => midpoint(rangeA) - midpoint(rangeB); // something else??Luego transforme, ordene, transforme de nuevo (suponiendo que se desee una salida de cadena)
let input = ["11-50", "2-10", "1", "51-200"] let ranges = input.map(string2Range); ranges.sort(compLow); // or another you define let output = ranges.map(range2String)Descargo de responsabilidad: es posible que parseInt no siempre haga lo que desea, ¡pero con este ejemplo debería funcionar!
a.sort((a, b) => parseInt(a) - parseInt(b));