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

时间:2012-08-11 12:24:06

标签: javascript sorting integer

  

可能重复:
  sort not working with integers?
  How to sort number in javascript sort method
  Array.sort() doesn't sort numbers correctly

代码:

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

输出:

1,10,100,25,40,5

我的预期输出:

1,5,10,25,40,100

4 个答案:

答案 0 :(得分:6)

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

您可以覆盖:

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

(传递的函数应返回一个负数,零或正数,根据第一个元素是否小于,等于或大于第二个元素。)

我从来没有见过这种奇怪方面的理由。

答案 1 :(得分:4)

根据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);

答案 2 :(得分:3)

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

答案 3 :(得分:1)

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

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