在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
抓我的头。
答案 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
。