我试图理解为什么Array.prototype.sort()
不适合日期对象:
var x = [new Date("2015-03-16"), new Date("2015-02-24"), new Date("2015-03-13")];
x.sort(); // [Fri Mar 13 2015 01:00:00 GMT+0100 (CET), Mon Mar 16 2015 01:00:00 GMT+0100 (CET), Tue Feb 24 2015 01:00:00 GMT+0100 (CET)]
x[0] <= x[1]; // true
x[1] <= x[2]; // false !!!!!!
我知道如何让他们很好地排序(使用x.sort(function (a, b) {return a - b; });
,但是我想了解为什么{Chrome和Safari}不会对数组中的元素进行排序它知道的顺序(使用<
时)
答案 0 :(得分:3)
实际上看起来规范(或至少what mozilla wites about it)应该归咎于(我的重点):
参数 - compareFunction
可选。指定定义排序顺序的函数。如果省略,则根据每个字符的Unicode代码点值根据每个元素的字符串转换对数组进行排序。
由于字符串转换从星期几开始,因此日期将始终按字母顺序排序:星期五,星期一,星期六,星期日,星期四,星期二,星期三....
答案 1 :(得分:0)
这个解决方案似乎有点复杂,但是如果你想完全避免将参数传递给sort
方法,那么这应该可行:
x.map(function (ele) {
return ele.valueOf();
}).sort().map(function (ele) {
return new Date(ele);
});