JavaScript 排序中“大于”和“减”的区别

Ins*_*sOp 2 javascript sorting

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

top.sort(function(a,b){ return b > a});
Run Code Online (Sandbox Code Playgroud)

我希望数组按降序排列。它适用于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]
Run Code Online (Sandbox Code Playgroud)

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

top.sort(function(a,b){ return b - a});
Run Code Online (Sandbox Code Playgroud)

现在有什么区别?为什么最上面的不能像我预期的那样工作(但可以使用小于 11 的数组长度?

jfr*_*d00 6

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

小于 0

0

大于 0

告诉它两个值是否相同或哪个更大。您的单一比较仅返回truefalse将转换为10没有足够的信息来正确评估哪个更大。它可以工作的时候b是大于a,但将返回false(可能解释为0当)a大于b这会错误地告诉排序算法,这两个值是相等的。

另一方面,

return b - a
Run Code Online (Sandbox Code Playgroud)

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

事实上,如果你想对一个字符串数组进行排序,你可以使用不同类型的比较,它也被编码为返回三种类型的返回值: