为什么 Javascript sort() 函数没有给出预期的输出

Why Javascript sort() function is not giving the expected output?

本文关键字:输出 sort Javascript 函数 为什么      更新时间:2023-09-26

可能的重复项:
排序不适用于整数?
如何在javascript排序方法
中对数字进行排序 Array.sort() 无法正确对数字进行排序

法典:

var x = [40,100,1,5,25,10];
x.sort();

输出:

1,10,100,25,40,5

我的预期输出:

1,5,10,25,40,100

默认情况下,JavaScript Array .sort() 函数在进行比较之前将数组元素转换为字符串。

您可以覆盖它:

x.sort(function(e1, e2) { return e1 - e2; });

(传递的函数应返回一个负数、零数或正数,具体取决于第一个元素是小于、等于还是大于第二个元素。

我从未见过这种语言奇怪方面的理由。

根据 MDN Array.sort

如果未提供 compareFunction,则通过将元素转换为字符串并按字典顺序("字典"或"电话簿",而不是数字)顺序比较字符串来对元素进行排序。例如,"80"按字典顺序排在"9"之前,但在数字排序中,9 排在 80 之前。

所以你应该做这样的事情:

function compareNumbers(a, b)
{
  return a - b;
}
var x = [40,100,1,5,25,10];
x.sort(compareNumbers);
var x = [40,100,1,5,25,10];
x.sort(function(a,b){return a-b});
默认情况下,

它按字母顺序升序排序(1 个字符排序.. 1,1_,1_,2,4_,5),并提供比较函数会改变该行为

更多信息可以在这里找到:http://www.w3schools.com/jsref/jsref_sort.asp