最近,当我使用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() ”函数中使用的是哪种算法?这是因为对于任何其他语言,在函数未正确对 数字进行 排序的情况下,我都没有发现此问题。
任何帮助是极大的赞赏。
好吧,如果要对以下列表进行排序,则它仅包含字符串:
var n = ["10", "5", "40", "25", "100", "1"];
因此,我希望 任何 一种语言都可以将它们作为字符串进行比较,从而导致以下排序顺序:
var n = ["1", "10", "100", "25", "40", "5"];
这就需要您的代码使用自定义排序(如您所做的那样)将字符串转换回整数以进行排序。
编辑
正如Pointy所述,默认情况下,JavaScript sort()方法按字母顺序对元素进行排序,包括数字:
默认情况下,sort()方法按字母顺序和升序对元素进行排序。但是,数字将无法正确排序(40在5之前)。要对数字进行排序,必须添加一个比较数字的函数。
简直太神奇了…因此,即使是整数数组也需要自定义排序。