"大于"之间的差异和"减去"在JavaScripts中排序

时间:2015-09-21 21:12:51

标签: javascript sorting

我正在使用像这样的排序算法

top.sort(function(a,b){ return b > a});

我预计数组会按降序排序。它适用于top = [1,2,3,4,5,6,7,8,9,10] 但是top = [1,2,3,4,5,6,7,8,9,10,11]我得到了一个意想不到的结果

[6, 11, 10, 9, 8, 7, 5, 4, 3, 2, 1]

我发现我使用了排序功能错误。我应该用

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

现在有什么区别?为什么顶部的不能像我预期的那样工作(但是数组长度小于11?

1 个答案:

答案 0 :(得分:4)

sort函数回调需要三个可能的返回值:

  

小于0

     

0

     

大于0

告诉它两个值是相同还是更大。您的单一比较仅返回truefalse,这些广告将投放到10,这些信息不足以正确评估哪一个更大。它可以在b大于a时有效,但在false大于0时会返回a(可能会被解释为b)这会错误地告诉排序算法这两个值是相等的。

另一方面,

return b - a

正确地为ba的所有可能数值提供所有三个返回值,因此它可以正常工作。如果您的值不是数字,那么您将不得不更明确地编写将返回三种类型的返回值的比较。返回减法的结果恰好符合排序回调标准。它当然不是编写比较函数的唯一方法。

实际上,如果要对字符串数组进行排序,可以使用不同类型的比较,这种比较也会被编码以返回三种类型的返回值:

    var result = ["hello", "goodbye", "adios"].sort(function(a, b) {
        return a.localeCompare(b);
    });

    document.write(JSON.stringify(result));