我正在尝试对一组时区偏移进行排序,如下所示:
["+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
然后比较那些?有没有办法用较少的处理来做到这一点?
答案 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会正确读取它。