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

9

1
哇,那个行为真的出乎意料。 - Shubham
4个回答

8
JavaScript数组默认使用.sort()函数在比较前将数组元素转换为字符串。您可以覆盖此功能:
x.sort(function(e1, e2) { return e1 - e2; });

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

我从未见过这种语言奇怪方面的解释。


1
我猜这是因为.sort()默认情况下必须处理任何类型的数据,包括混合类型。你会如何对[2, "10", "25f"]进行排序? - JJJ
是的,那可能就是了;通用函数必须检查整个数组以查看是否全部按顺序为数字,以便更加智能化。 - Pointy

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

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

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接