随机数组生成的意外行为

Sta*_*lem 5 javascript arrays sorting coercion

我试图按降序排序生成10到1000之间的随机数组.

这是我写的代码:

function GenerateRandomArray(){
  var array = [];

  for (var i = 0; i < 10; i++) {
    array[i] = Math.round(Math.random() * (1000 - 10 + 1) + 10);
  }
  return array.sort().reverse();
}
Run Code Online (Sandbox Code Playgroud)

在终端中运行时,我得到的结果如下:

新GenerateRandomArray()=> [924,804,79,788,585,451,267,217,153,135]

新GenerateRandomArray()=> [869,697,647,59,458,30,291,157,112,111]

新GenerateRandomArray()=> [999,98,872,823,705,418,404,306,259,20]

new GenerateRandomArray()=> [688,666,664,615,580,565,336,304,250,246]

new GenerateRandomArray()=> [912,906,759,690,673,481,429,355,19,103]

为什么有些数组格式正确,有些数组中间有一个非有序数字?

我测试过:

  • 将数字转换为字符串
  • 访问数组中的无序元素(它给出了相同的数字 - 显然)
  • 使用函数而不是构造函数来完成它

这不会改变奇怪的结果.

我错过了像JS强制性财产之类的东西吗?

谢谢 :)

小智 3

默认情况下,该sort函数按字母数字/字母顺序排序(即“字符串排序”)。对于字符串来说,“aaa”位于“b”之前,类似地“111”位于“2”之前。

要改为按数值排序,您可以提供自己的比较函数。

array.sort(function(a, b) { 
    return a - b;
});
Run Code Online (Sandbox Code Playgroud)