我创建了一个非常简单的数组排序脚本,它可以在Firefox上运行,但chrome和ie正在给我一个无序数组。
var arr = ["2017-02-17",
"2017-02-17",
"2017-02-16",
"2017-02-15",
"2017-02-16",
"2017-02-15",
"2017-02-14",
"2017-02-16",
"2017-02-17",
"2017-02-17",
"2017-02-13"];
arr.sort(function(a, b) {return a>b;});
console.log(arr);
是铬还是臭虫还是错过了什么?我几乎不相信chrome和ie differenrt js引擎有同样的问题。
答案 0 :(得分:2)
您可以对Array#sort
使用正确的比较,并将其用作返回值,而不是单个true
/ false
,这样可以消除所需的负值。< / p>
如果您有ISO 6801个日期字符串,则可以使用String#localeCompare
。
var arr = ["2017-02-17", "2017-02-17", "2017-02-16", "2017-02-15", "2017-02-16", "2017-02-15", "2017-02-14", "2017-02-16", "2017-02-17", "2017-02-17", "2017-02-13"];
arr.sort(function(a, b) {
return a.localeCompare(b);
});
console.log(arr);
&#13;
如果您不关心 Unicode代码点,可以使用Array#sort
sort()
方法对数组中的元素进行排序并返回数组。排序不一定稳定。默认排序顺序是根据字符串Unicode代码点。
没有 compareFunction
var arr = ["2017-02-17", "2017-02-17", "2017-02-16", "2017-02-15", "2017-02-16", "2017-02-15", "2017-02-14", "2017-02-16", "2017-02-17", "2017-02-17", "2017-02-13"];
arr.sort();
console.log(arr);
&#13;
答案 1 :(得分:2)
由于日期为字符串,因此创建日期并检查相等性总是更好。
比较字符串可能会出现问题,因为您可以从任何格式获取日期。经典示例为yyyy-m-d
。
在字符串比较中,2017-1-12
大于2017-08-17
。
var arr = ["2017-02-17", "2017-02-17", "2017-02-16", "2017-02-15", "2017-02-16", "2017-02-15", "2017-02-14", "2017-02-16", "2017-02-17", "2017-02-17", "2017-02-7", "2017-02-13"];
arr.sort(function(a, b) {
var d1 = new Date(a);
var d2 = new Date(b);
return +d1 - +d2;
})
console.log(arr)
注意:正如@K3N所指出的,如果输入始终采用ISO格式,那么您可以使用任何方式进行字符串比较(例如@Nina Scholz's answer)。但如果有可能以任何其他格式接收输入,我建议改为比较日期对象。
答案 2 :(得分:1)
您必须使用简单排序而不传递callback
函数。
arr.sort();
var arr = ["2017-02-17",
"2017-02-17",
"2017-02-16",
"2017-02-15",
"2017-02-16",
"2017-02-15",
"2017-02-14",
"2017-02-16",
"2017-02-17",
"2017-02-17",
"2017-02-13"];
arr.sort();
console.log(arr);
&#13;