自定义排序时区偏移数组

时间:2016-08-03 02:30:52

标签: javascript sorting

我正在尝试对一组时区偏移进行排序,如下所示:

["+03:00", "-11:00", "+05:00", "-04:00"]

这只是数组的一个子集。包括基于GMT的时区的所有偏移。逻辑排序是从GMT到-11.00

的距离

所以最终的正确排序是:

["-11:00", "-04:00", "+03:00", "+05:00"]

我必须在这里使用Array.prototype.sort,但我不完全确定这里使用的最有效的自定义排序功能是什么。它会将字符串分成两部分吗?例如:-|+offset,例如:11, 4, 3, 5然后比较那些?有没有办法用较少的处理来做到这一点?

2 个答案:

答案 0 :(得分:3)

排序功能应该是

function(a, b) { 
    return parseFloat(a.replace(':', '.')) - parseFloat(b.replace(':', '.'));
}

基本上,将:更改为.并返回生成的解析浮点数中的差异

您还可以执行以下操作:

function(a, b) { 
    return parseInt(a.replace(':', ''), 10) - parseInt(b.replace(':', ''), 10);
};

这会将字符串转换为+/-HHMM,然后您可以将其解析为整数,并且仍然能够支持非实质数量的非整小时区。虽然我认为没有那么多的表现可以获得

答案 1 :(得分:0)

假设时区始终以:00结尾,您只需parseInt

["+03:00", "-11:00", "+05:00", "-04:00"].sort(
    ( a, b ) => (a, 10) > parseInt(b, 10)
);

parseInt会读取一个字符串,直到找到看起来不像数字的字符。例如,parseInt('1a')会返回1。由于'-11:00'的第一部分是有效数字('-11'),因此parseInt会正确读取它。