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); |
号
这个较短函数背后的逻辑是比较器必须返回
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); |
。