为什么javascript不按数字顺序排序数字数组?

时间:2013-11-02 07:58:48

标签: javascript arrays sorting

我在Javascript中面对数字数组的奇怪排序结果。例如排序[1,2,10,20,100,200]的结果:

> [1, 2, 10, 20, 100, 200].sort()
[ 1, 10, 100, 2, 20, 200 ]

为什么会这样?

似乎数组排序不能直接用于排序数字数组?

5 个答案:

答案 0 :(得分:9)

来自the MDN documentation

  

如果未提供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);