排序和反向方法在JavaScript中无法正常工作

时间:2016-04-15 17:54:07

标签: javascript

我正在尝试这个: -

[231, 907, 1246, 1203, 1305, 484, 709, 1220, 616, 1200].sort();

输出如下: -

[1200, 1203, 1220, 1246, 1305, 231, 484, 616, 709, 907]

其中我检查的第一个元素的数组typeof是数字。

任何想法为什么它不起作用?

3 个答案:

答案 0 :(得分:5)

等数字使用回调

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

var data = [231, 907, 1246, 1203, 1305, 484, 709, 1220, 616, 1200];

data.sort(numSortDesc);
document.write('<pre>' + JSON.stringify(data, 0, 4) + '</pre>');

答案 1 :(得分:4)

从MDN开始,在Array上进行排序的原型继承方法是:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

sort()方法对数组中的元素进行排序并返回数组。排序不一定稳定。默认排序顺序是根据字符串Unicode代码点。

所以排序是正确的,你省略了比较器功能。添加比较器函数以根据您的需要进行排序(在这种情况下,数字升序或降序的任何匿名回调函数都可以,即:)

function(a, b) {
   if (a == b) {
       return 0;
   }
   return (a > b) ? 1 : -1; //Depending on your desired sort order
}

答案 2 :(得分:2)

这是因为.sort()将按字母顺序排列。如果要按数字值排序,则需要指定排序时间:

document.write([231, 907, 1246, 1203, 1305, 484, 709, 1220, 616, 1200].sort((a,b) => b-a));

b - a将对数组进行降序排序,a - b升序

来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort