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

kab*_*bir 7 javascript sorting

这看起来很简单,但JavaScript却给出了错误的结果.

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

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

[1,10,5]

luk*_*nis 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);
Run Code Online (Sandbox Code Playgroud)

或者你可以通过传递更简单的功能作弊:

function sorter(a, b){
  return a - b;
}

[1, 10, 5].sort(sorter);
Run Code Online (Sandbox Code Playgroud)

这个较短函数背后的逻辑是比较器必须返回x>0 if a > b,x<0 if a < bzero 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
Run Code Online (Sandbox Code Playgroud)

  • @KellyJAndrews谈论可重用性,如果你使用yoursort 5次,我的代码将通过可读性,可重用性,DRY方法击败你的,如果你对我的方法不满意,只需删除两个换行符 (4认同)

Kel*_*ews 5

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

var points = [5, 10, 1];
points.sort(function(a,b){return a-b});
Run Code Online (Sandbox Code Playgroud)

是一个工作小提琴。

  • 它得到了不好的说唱,但我认为对于简单的基础知识,它是准确的。 (4认同)