Если ваш ranges
будет сохранен во времени, вы можете создать объект, чтобы поддерживать связь между ranges
и назначенным ордером.Затем вы можете использовать этот объект в методе Array.sort () :
const rangeOrder = {
'Lower than $5,000': 0,
'$5,000 - $9,999': 1,
'$10,000 - $29,999': 2,
'$30,000 - $49,999': 3,
'$50,000+': 4,
}
let input = ['$10,000 - $29,999', '$30,000 - $49,999', '$5,000 - $9,999', '$50,000+', 'Lower than $5,000'];
console.log(input.sort(
(a, b) => rangeOrder[a] - rangeOrder[b]
));
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
Другим решением, позволяющим избежать харакодирования диапазонов, может быть использование пользовательской функции для сопоставления значения диапазона maximun для каждой строки.
let input = ['$10,000 - $29,999', '$30,000 - $49,999', '$5,000 - $9,999', '$50,000+', 'Lower than $5,000'];
const matchValue = (str) =>
{
let matches = str.match(/\d+,\d+/g);
let maxVal = matches.length > 1 ? matches[1] : matches[0];
return +(maxVal.replace(",", ""));
}
input.sort((a, b) => matchValue(a) - matchValue(b));
console.log(input);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}