我在Javascript中面对数字数组的奇怪排序结果。例如排序[1,2,10,20,100,200]的结果:
> [1, 2, 10, 20, 100, 200].sort()
[ 1, 10, 100, 2, 20, 200 ]
为什么会这样?
似乎数组排序不能直接用于排序数字数组?
答案 0 :(得分:9)
如果未提供compareFunction,则会通过将元素转换为字符串并按字典(“词典”或“电话簿”,而不是数字)顺序比较字符串来对元素进行排序。
(或参见EMCAScript specification的相关部分,向Felix Kling提示挖掘参考资料)
如果要进行数字排序,请传递比较函数:
[1, 2, 10, 20, 100, 200].sort(function (a,b) { return a-b; });
答案 1 :(得分:1)
使用方法sort()
对JavaScript中的数组进行排序。单独调用var array=[40, 6, 300];
array.sort();
只是按字母顺序对数组进行排序,
例如:
Array.sort(function(number1, number2){
return number1-number2;
})
数组现在变为[300,40,6],该函数将仅按第一个数字排序。
在这种情况下,要编写一个函数:
space
数组现在变为[6,40,300]。
答案 2 :(得分:0)
array.sort
仅排序字符串。要对数字进行排序,请使用:
[1, 2, 10, 20, 100, 200].sort(function(a,b) { return a-b });
答案 3 :(得分:0)
尝试使用此数字排序:
[ 1, 10, 100, 2, 20, 200 ].sort(function(a,b){return a-b})
答案 4 :(得分:0)
sort()方法在每个项目上调用String()强制转换函数,然后比较字符串以确定正确的顺序。即使数组中的所有项都是数字,也会发生这种情况。 试试这个:
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);