一尘不染

JavaScript“ sort()”函数的算法

algorithm

最近,当我使用JavaScript“
sort()”函数时,在其中一个教程中发现该函数不能正确地对数字进行排序。而不是对数字进行排序,必须添加一个比较数字的函数,例如以下代码:

<script type="text/javascript">
function sortNumber(a,b)
{
    return a - b;
}

var n = ["10", "5", "40", "25", "100", "1"];
document.write(n.sort(sortNumber));
</script>

输出如下:

1,5,10,25,40,100

现在我不明白的是,为什么会这样?有人可以详细说明“ sort() ”函数中使用的是哪种算法?这是因为对于任何其他语言,在函数未正确对 数字进行
排序的情况下,我都没有发现此问题。

任何帮助是极大的赞赏。


阅读 184

收藏
2020-07-28

共1个答案

一尘不染

好吧,如果要对以下列表进行排序,则它仅包含字符串:

var n = ["10", "5", "40", "25", "100", "1"];

因此,我希望 任何 一种语言都可以将它们作为字符串进行比较,从而导致以下排序顺序:

var n = ["1", "10", "100", "25", "40", "5"];

这就需要您的代码使用自定义排序(如您所做的那样)将字符串转换回整数以进行排序。

编辑

正如Pointy所述,默认情况下,JavaScript
sort()方法
按字母顺序元素进行排序,包括数字:

默认情况下,sort()方法按字母顺序和升序对元素进行排序。但是,数字将无法正确排序(40在5之前)。要对数字进行排序,必须添加一个比较数字的函数。

简直太神奇了…因此,即使是整数数组也需要自定义排序。

2020-07-28