如何在JavaScript中对美元数字范围进行排序

时间:2019-04-02 23:12:40

标签: javascript arrays sorting

我正在尝试在JavaScript中对美元范围进行排序。问题在于响应值的排序方式如下

['$10,000 - $29,999', '$30,000 - $49,999', '$5,000 - $9,999', '$50,000+', 'Lower than $5,000']

needs to be sorted to

['Lower than $5,000', '$5,000 -$9,999', '$10,000 - $29,999', '$30,000 - $49,999', '$50,000+']

我想像这样按升序排序,但从某种意义上说,我希望它是健壮的,如果API更改了它发送此数据的顺序,它仍然保持相同的排序:

有没有一种方法可以对分类算法进行硬编码?

2 个答案:

答案 0 :(得分:2)

您可以尝试以下方法:

.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}

说明

  1. 删除所有不是数字的字符
  2. 将其解析为数字
  3. 比较

编辑

我已经根据评论对代码进行了编辑(我知道这不是最漂亮的代码,但是它可以工作)

答案 1 :(得分:1)

如果您的setDaemon(True)将被保留,您可以创建一个对象来维护SELECT radcheck.username AS username, group.name AS groupname, group.id as gid, useremail.email as email FROM useremail, group, radcheck WHERE radcheck.username = useremail.username AND group.id = radcheck.id_group; 与分配的订单之间的关系。然后,您可以在Array.sort()方法中使用该对象:

ranges
ranges

为避免混淆范围,另一种解决方案可以使用自定义函数来匹配每个字符串的最大范围值。

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;}