Safari浏览器Javascript数组似乎对字符串排序不正确

Safari browser Javascript array seems to sort strings incorrectly

本文关键字:字符串 排序 不正确 浏览器 Javascript 数组 Safari      更新时间:2023-09-26

在Safari控制台中:

var x = ["20", "21"]; x.sort(function(a,b){return b > a}); x
> ["20", "21"]

铬:

var x = ["20", "21"]; x.sort(function(a,b){return b > a}); x
> ["21", "20"]

这在Safari中可以正常工作,不过(与Chrome匹配):

"20" > "21"
false

挠我的头。

Array#sort需要回调您想要排序的类型。

基本上,您需要使用数字进行排序,因为字符串排序字符串而不是数字。第一个按字符串排序,第二个按数值排序。

var x = ["20", "21", "2", "100", "10", "1", "3", "30"];
x.sort();
console.log(x);
x.sort(function (a, b) {
    return a - b; // implicit casting to Number
});
console.log(x);

比较回调函数必须返回一个数字,而不仅仅是true/false。这与其他语言非常不同,在其他语言中,您可以只提供一个"小于"函数来进行排序比较。

sort()在这两种浏览器中的不同实现导致了不同的观察结果。。。

排序函数的主体应该只是return b - a