为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript中的排序:对于比较函数来说,返回布尔值不足够吗?

JavaScript中的排序:对于比较函数来说,返回布尔值不足够吗?

神不在的星期二 2019-06-01 15:12:56
JavaScript中的排序:对于比较函数来说,返回布尔值不足够吗?我总是像这样成功地对数组进行排序(当我不想要标准的字典排序时):var arr = […] // some numbers or soarr.sort(function(a, b) {     return a > b;});现在,有人告诉我这是不对的,我需要return a-b相反。是真的吗?如果是的话,为什么?我已经测试了我的比较功能,它是有效的!还有,为什么我的解决方案如此普通什么时候是错的?
查看完整描述

2 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

这个sort函数需要一个需要两个参数的函数。ab,并返回:

  • 如果出现一个负数

    以前 b

  • 如果出现一个正数

     b

  • 如果a和b的相对顺序不重要,则为零。

以便按升序对数字进行排序。return a - b将产生正确的返回值;例如:

a    b    ret
1    2    -1
3    2     1
2    2     0

另一方面return a > b生成下列返回值:

a    b    ret      implied
1    2    false    0
3    2    true     1
2    2    false    0

在上面的示例中,排序函数被告知1和2是(而将1放在2之前或2在1之前并不重要)。这将产生不正确的结果,例如(在Chrome 49中):

[5, 8, 7, 1, 2, 3, 4, 6, 9, 10, 11, 12, 13].sort(function(a, b) {
    return a > b;});// [4, 5, 3, 1, 2, 6, 7, 8, 9, 10, 11, 12, 13]


查看完整回答
反对 回复 2019-06-01
  • 2 回答
  • 0 关注
  • 590 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信