Safari浏览器Javascript数组似乎错误地排序字符串

时间:2016-07-16 21:07:05

标签: javascript safari

在Safari控制台中:

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

Chrome:

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

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

"20" > "21"
false

抓我的头。

2 个答案:

答案 0 :(得分:1)

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




答案 1 :(得分:0)

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

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

sort函数的主体应该是return b - a