繁体   English   中英

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

[英]Why do javascript sort a numeric array not in numeric order?

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

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

为什么会这样呢?

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

MDN文档中

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

(或参阅EMCAScript规范的相关部分,Felix Kling的技巧以获取参考)

如果要进行数字排序,请通过比较函数:

[1, 2, 10, 20, 100, 200].sort(function (a,b) { return a-b; });

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]。

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()方法在每个项目上调用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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM