Javascript 这真的是chrome和ie的数组排序错误吗?

Javascript 这真的是chrome和ie的数组排序错误吗?,javascript,arrays,google-chrome,sorting,Javascript,Arrays,Google Chrome,Sorting,我创建了一个非常简单的数组排序脚本,它可以在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) {retur

我创建了一个非常简单的数组排序脚本,它可以在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漏洞还是我遗漏了什么?我几乎不相信chrome和ie有不同的js引擎有相同的问题。

您必须使用简单的排序,而不传递
回调函数

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();

控制台日志(arr)您必须在不传递
回调函数的情况下使用简单排序

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();

控制台日志(arr)
您可以使用正确的比较,并将其用作返回值,而不是单个
true
/
false
,这样可以消除所需的负值

虽然您有日期字符串,但可以使用它

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-13”];
arr.sort(函数(a,b){
返回a.localeCompare(b);
});

控制台日志(arr)
您可以使用正确的比较,并将其用作返回值,而不是单个
true
/
false
,这样可以消除所需的负值

虽然您有日期字符串,但可以使用它

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-13”];
arr.sort(函数(a,b){
返回a.localeCompare(b);
});

控制台日志(arr)因为日期是字符串,所以最好创建一个日期并检查是否相等

比较字符串可能会有问题,因为您可以使用任何格式的日期。典型的例子是
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-7”、“2017-02-13”];
arr.sort(函数(a,b){
var d1=新日期(a);
var d2=新日期(b);
返回+d1-+d2;
})

console.log(arr)
因为日期是字符串,所以最好创建一个日期并检查是否相等

比较字符串可能会有问题,因为您可以使用任何格式的日期。典型的例子是
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-7”、“2017-02-13”];
arr.sort(函数(a,b){
var d1=新日期(a);
var d2=新日期(b);
返回+d1-+d2;
})

console.log(arr)
只需调用arr.sort()就会忘记数据格式,请尝试var arr=[“17”、“17”、“16”、“15”、“15”、“14”、“16”、“17”、“17”、“13”];它还返回无序列表。只需调用arr.sort()就会忘记数据格式,请尝试var arr=[“17”、“17”、“16”、“15”、“16”、“15”、“14”、“16”、“17”、“17”、“13”];它还返回无序列表。它们看起来是ISO格式的,应该像字符串一样进行排序(Array.sort()的默认值)。问题在于返回值应为-1/0/1,而不是布尔值。如果是这样,则为True,但如果是ISO格式(yyyy-mm-dd),则日期为2017-01-12,不会引起任何问题。@K3N更新了我的答案,并警告您。我仍然保留我的方法,因为这将帮助格式不一致的人。:-)它们看起来是ISO格式的,应该像字符串一样进行排序(Array.sort()的默认值)。问题在于返回值应为-1/0/1,而不是布尔值。如果是这样,则为True,但如果是ISO格式(yyyy-mm-dd),则日期为2017-01-12,不会引起任何问题。@K3N更新了我的答案,并警告您。我仍然保留我的方法,因为这将帮助格式不一致的人。:-)在我看来,这似乎是格式良好的ISO日期,但请注意,Unicode代码点在这里并不真正适用,因为显示的日期字符串中的所有字符都在ASCII范围内(假设始终使用正常的“破折号”/-),所以sort()在这里应该非常稳定。@K3N,对,在这种情况下。我想,我应该提到不带回调的排序和localeCompare之间的区别。对我来说,它看起来像格式良好的ISO date,但请注意,Unicode代码点在这里并不真正适用,因为显示的日期字符串中的所有字符都在ASCII范围内(假设始终使用正常的“破折号”/-),所以sort()在这里应该非常稳定。@K3N,对,在这个情况下。我想,我应该提到无回调排序和localeCompare之间的区别。