JavaScript 数字排序不按预期工作

9
我们正在查阅 MDN 的 `Array.prototype.sort()` 文档,其中有一个示例:
var array1 = [1, 2,3,4,5,6,7,8,9,10];
array1.sort();
console.log(array1);

因此,预期输出应为:
[1, 2, 3 , 4, 5, 6, 7, 8, 9, 10

但是我们得到的不是这个,而是
[1, 10, 2, 3, 4, 5, 6, 7, 8, 9]

为什么排序结果与我们期望的不一样?

因为它将上述数组视为字符串数组。 - Nikhil Ghuse
5个回答

10

您需要使用排序函数。默认情况下,排序使用字母排序而不是数字排序。

array1.sort(function (a,b) {
    return a - b; // Ascending
});

array1.sort(function (a,b) {
    return b - a; // Descending
});

0

It is from the from the reference of This post

var numArray = [1, 2,3,4,5,6,7,8,9,10];
for (var i = 0; i < numArray.length; i++) {
    var target = numArray[i];
    for (var j = i - 1; j >= 0 && (numArray[j] > target); j--) {
        numArray[j+1] = numArray[j];
    }
    numArray[j+1] = target
}
console.log(numArray);


0

你可以将一个函数传递给排序方法,用于升序排序:

array1.sort(function(a,b){return a>b?1:b>a?-1});

0
    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, 2,3,4,5,6,7,8,9,10].sort(sorter);

0
请使用以下代码:
var array1 = [1, 2,3,4,5,6,7,8,9,10];
array1.sort(function(a,b){
    return parseInt(a) > parseInt(b);
    }
  );
console.log(array1);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接