Safari浏览器Javascript数组似乎对字符串排序不正确
Safari browser Javascript array seems to sort strings incorrectly
在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
。
相关文章:
- Javascript排序字符串或数字
- 根据另一个数组对数组进行排序,包括位置和字符串[ES6]
- 根据Javascript中的字符串值对数组的数组进行排序
- Sencha Ext JS排序标准以字符串而不是JSON的形式发送
- 可以用javascript对包含数字的字符串进行排序
- 如何对字母数字字符串值进行排序
- AngularJS/Javascript:使用运算符对字符串进行排序
- 按字母顺序、数字顺序和特殊字符对字符串数组进行排序
- 通过自定义字母javascript对字符串进行排序
- 按表示节号的字符串排序的下划线
- Javascript字符串排序
- 自定义javascript字符串排序比较器
- 在javascript中按两个或多个子字符串排序字符串数组
- JavaScript -按时间字符串排序
- 字符串排序在算法上是如何工作的
- 按字符串排序Javascript对象数组
- 根据子字符串中的数字对字符串排序
- Javascript货币字符串排序
- Safari浏览器Javascript数组似乎对字符串排序不正确
- 多维数组按字符串排序,而不是按值排序