这看起来很简单,但JavaScript的结果却不正确。
我做错了什么还是这是一种语言怪癖?
[5,10,1] .sort();
[1,10,5]
答案 0 :(得分:23)
Javascript按字母顺序排序。这意味着“10”低于“5”,因为“1”低于“5”。
要对数值进行排序,您需要传递数字比较器,如下所示:
function sorter(a, b) {
if (a < b) return -1; // any negative number works
if (a > b) return 1; // any positive number works
return 0; // equal values MUST yield zero
}
[1,10, 5].sort(sorter);
或者你可以通过传递更简单的功能作弊:
function sorter(a, b){
return a - b;
}
[1, 10, 5].sort(sorter);
这个较短函数背后的逻辑是比较器必须返回x>0 if a > b
,x<0 if a < b
和zero if a is equal to b
。所以万一你有
a=1 b=5
a-b will yield negative(-4) number meaning b is larger than a
a=5 b=1
a-b will yield positive number(4) meaning a is larger than b
a=3 b=3
a-b will yield 0 meaning they are equal
答案 1 :(得分:4)
答案 2 :(得分:0)
默认排序顺序是字母顺序和升序。如果你想对数字进行排序,你可以这样做:
function sortNumber(a,b) {
return a - b;
}
var numArray = [140000, 104, 99];
numArray.sort(sortNumber);
答案 3 :(得分:0)
function sortit(a, b){ return (a-b); }
[1, 5, 10].sort(sortit);
答案 4 :(得分:0)
您可以尝试:
[5, 10, 1].sort(function(a, b){ return a - b }) # print [1, 5, 10]
答案 5 :(得分:0)
你可以尝试
[5, 10, 1].sort(function(a,b){return a-b})