我正在质疑我现在所知道的一切。
> [ 37, 4, 3, 1, 3, 10, 8, 29, 9, 13, 19, 12, 11, 14, 20, 22, 22, 27, 28, 33, 34 ].sort((a, b) => a > b)
[19, 34, 3, 1, 3, 10, 8, 29, 9, 13, 4, 12, 11, 14, 20, 22, 22, 27, 28, 33, 37]
预计它将从1开始,然后是3(不是19和34)
我尝试过的事情:
[ 37, 4, 3, 1, 3, 10, 8, 29, 9, 13, 19, 12, 11, 14, 20, 22, 22, 27, 28, 33, 34 ].sort(function (a, b) { return a > b })
此外:
[ 37, 4, 3, 1, 3, 10, 8, 29, 9, 13, 19, 12, 11, 14, 20, 22, 22, 27, 28, 33, 34 ].sort(function (a, b) { return +a > +b })
答案 0 :(得分:3)
通过在比较函数中返回它的差异来对数字数组进行排序。
console.log(
[37, 4, 3, 1, 3, 10, 8, 29, 9, 13, 19, 12, 11, 14, 20, 22, 22, 27, 28, 33, 34].sort((a, b) => a - b)
)
检查MDN docs以了解返回值的含义,以下内容来自MDN文档:
答案 1 :(得分:2)
.sort()
回调函数应该返回数字响应:
a
< b
当a
== b
时,a
>时,b
您的回调返回一个布尔结果,排序代码将其解释为0
或1
。因此,对于某些值对,您的回调将产生相互矛盾的结果。
例如,请考虑数组37
和4
中的对。如果在a
为37
且b
为4
的情况下调用回调,则您的回调将返回true
(1
)。首先,它应该是倒退的。更重要的是,如果在排序过程的后期再次比较这两个值(这很可能),但是以相反的顺序,你的回调返回0
,这又是错误的答案,也是不同的错误答案。
在您的情况下,最简单的方法是用简单的数字减法替换该比较:
(a, b) => a - b
答案 2 :(得分:2)
要以数字方式排序,您需要添加一个处理数字排序的方法。
var array=[ 37, 4, 3, 1, 3, 10, 8, 29, 9, 13, 19, 12, 11, 14, 20, 22, 22, 27, 28, 33, 34 ];
console.log(array.sort(callback));
function callback(a,b){
return a-b;
}
比较功能具有以下形式:
function compare(a, b) {
if (a < b) {
return -1;
}
if (a > b) {
return 1;
}
// a must be equal to b
return 0;
}