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

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

我总是像这样成功地对数组进行排序(当我不想要标准的字典排序时):

var arr = […] // some numbers or soarr.sort(function(a, b) {
    return a > b;});

现在,有人告诉我这是不对的,我需要return a-b相反。是真的吗?如果是的话,为什么?我已经测试了我的比较功能,它是有效的!还有,为什么我的解决方案如此普通什么时候是错的?


神不在的星期二
浏览 591回答 2
2回答

不负相思意

这个sort函数需要一个需要两个参数的函数。a和b,并返回:如果出现一个负数以前 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]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript