我在数值数组中遇到了奇怪的排序结果。例如排序结果[1,2,10,20,100,200]:为什么JavaScript不按数字顺序排序数值数组?
> [1, 2, 10, 20, 100, 200].sort()
[ 1, 10, 100, 2, 20, 200 ]
为什么发生这种情况?
看来什么数组排序不能用于直接排序数值数组?
我在数值数组中遇到了奇怪的排序结果。例如排序结果[1,2,10,20,100,200]:为什么JavaScript不按数字顺序排序数值数组?
> [1, 2, 10, 20, 100, 200].sort()
[ 1, 10, 100, 2, 20, 200 ]
为什么发生这种情况?
看来什么数组排序不能用于直接排序数值数组?
如果未提供的compareFunction,元件通过将它们转换为字符串,并在字典(“字典”或“电话薄”,而不是数值)顺序比较字符串排序。
(或见EMCAScript specification的相关部分,帽尖费利克斯·克林为挖参考)
如果你想要做一个数字排序,然后通过一个比较功能:
[1, 2, 10, 20, 100, 200].sort(function (a,b) { return a-b; });
正确的名称是“Kling”,与“l”。不用担心,大多数人似乎弄错了;) –
它就在我的面前。现在我不能在人们眼前至少一周的时间里误导我的名字拼写错误! – Quentin
array.sort
只对字符串排序。排序号使用:
[1, 2, 10, 20, 100, 200].sort(function(a,b) { return a-b });
尝试此数字排序:
[ 1, 10, 100, 2, 20, 200 ].sort(function(a,b){return a-b})
的sort()方法调用每个项目的()的字符串转换函数,然后比较字符串,以确定正确的订购。即使数组中的所有项都是数字,也会发生这种情况。 试试这种方式:
function compare(value1, value2) {
if (value1 < value2) {
return -1;
} else if (value1 > value2) {
return 1;
} else {
return 0;
}
}
[ 1, 10, 100, 2, 20, 200 ].sort(compare);
是的。这就是它在规范中的定义:http://es5.github.io/#x15.4.4.11。 –
可能重复[排序不与整数?](http://stackoverflow.com/questions/1063007/sort-not-working-with-integers) – darthmaim