1

我在 Javascript 中遇到了数值数组的奇怪排序结果。例如排序 [1,2,10,20,100,200] 的结果:

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

为什么会这样?

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

4

5 回答 5

13

MDN 文档

如果未提供 compareFunction,则通过将元素转换为字符串并按字典(“字典”或“电话簿”,而不是数字)顺序比较字符串来对元素进行排序。

(或查看EMCAScript 规范的相关部分,向 Felix Kling 致敬以挖掘参考资料)

如果要进行数字排序,请传递一个比较函数:

[1, 2, 10, 20, 100, 200].sort(function (a,b) { return a-b; });
于 2013-11-02T08:01:31.130 回答
1

JavaScript 中的数组排序是通过 方法完成的array.sort()。调用sort()本身只是按字母顺序对数组进行排序,例如:

var array=[40, 6, 300]; 
array.sort();

数组现在变为 [300,40,6],该函数将仅按第一个数字排序。

在这种情况下要排序编写一个函数:

Array.sort(function(number1, number2){
    return number1-number2;  
}) 

数组现在变为 [6,40,300]。

于 2018-06-16T15:26:52.750 回答
0

array.sort只对字符串进行排序。要对数字进行排序,请使用以下命令:

[1, 2, 10, 20, 100, 200].sort(function(a,b) { return a-b });
于 2013-11-02T08:02:45.567 回答
0

试试这个进行数字排序:

[ 1, 10, 100, 2, 20, 200 ].sort(function(a,b){return a-b})
于 2013-11-02T08:05:00.853 回答
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);
于 2013-11-02T08:05:55.897 回答