您是否必须使用比较函数对数组进行排序?

时间:2015-12-07 21:38:40

标签: javascript arrays sorting

我的印象是,为了对一系列数字进行排序,您必须执行以下操作:

var numbers = [4, 1, 2, 3];

function compare(a, b) {
    return a - b;
} 

numbers.sort(compare);

然而,我发现以下似乎有效:

var numbers = [5, 3, 2, 6, 4, 7];
var sortNumbers = numbers.sort();
console.log(sortNumbers); 

这样做有什么不对吗?它似乎适用于所有情况。

2 个答案:

答案 0 :(得分:2)

  

它似乎适用于所有情况。

您尚未考虑任何数字字符串表示中包含多个数字的情况。 字典默认比较也因负数而失败。

有关详细信息和一些反例,请参阅How to sort an array of integers correctly

答案 1 :(得分:0)

这里有一个默认的排序功能:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

  

默认排序顺序是根据字符串Unicode代码点。

var scores = [1, 10, 2, 21]; 
scores.sort(); // [1, 10, 2, 21]
// Watch out that 10 comes before 2,
// because '10' comes before '2' in Unicode code point order.

所以是的,它不会像你一样对数字进行排序。它会将它们排序为字符串。

为方便使用,您可以内联排序功能:

numbers.sort(function(a,b){return a - b});