关于排序:为什么JavaScript不能排序[5,10,1]?

Why can't JavaScript sort [5, 10, 1]?

本问题已经有最佳答案,请猛点这里访问。

这看起来很简单,但javascript给出的结果不正确。

我是做错了什么,还是这是一种语言怪癖?

[5, 10, 1].sort();

[ 1, 10, 5 ]


javascript按字母顺序排序。这意味着"10"低于"5",因为"1"低于"5"。

要对数值进行排序,您需要像这样传递数值比较器:

1
2
3
4
5
6
7
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);

或者你可以通过传递更简单的函数来作弊:

1
2
3
4
5
function sorter(a, b){
  return a - b;
}

[1, 10, 5].sort(sorter);

这个较短函数背后的逻辑是比较器必须返回x>0 if a > bx<0 if a < bzero if a is equal to b。所以如果你有

1
2
3
4
5
6
7
8
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


必须将函数传递给sort方法。

1
2
var points = [5, 10, 1];
points.sort(function(a,b){return a-b});

这是一把工作的小提琴。


你可以试试

1
[5, 10, 1].sort(function(a,b){return a-b})

您可以尝试:

1
[5, 10, 1].sort(function(a, b){ return a - b })   # print [1, 5, 10]


1
2
function sortit(a, b){ return (a-b); }
[1, 5, 10].sort(sortit);

默认排序顺序为字母和升序。如果要对数字进行排序,可以这样做:

1
2
3
4
5
6
function sortNumber(a,b) {
    return a - b;
}

var numArray = [140000, 104, 99];
numArray.sort(sortNumber);