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 的数组长度?
sort 函数回调需要三个可能的返回值:
小于 0
0
大于 0
告诉它两个值是否相同或哪个更大。您的单一比较仅返回true或false将转换为1或0没有足够的信息来正确评估哪个更大。它可以工作的时候b是大于a,但将返回false(可能解释为0当)a大于b这会错误地告诉排序算法,这两个值是相等的。
另一方面,
return b - a
Run Code Online (Sandbox Code Playgroud)
正确地提供所有这三个返回值的所有可能的数值b和a,因此它工作正常。如果您的值不是数字,则您必须更明确地编写一个比较,以返回三种类型的返回值。返回减法的结果恰好符合排序回调标准。这当然不是编写比较函数的唯一方法。
事实上,如果你想对一个字符串数组进行排序,你可以使用不同类型的比较,它也被编码为返回三种类型的返回值:
return b - a
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
769 次 |
| 最近记录: |