随机数组生成时出现意外行为
Unexpected behavior with random array generation
我试图生成一个按降序排列的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();
}
当在终端中运行时,以下是我得到的结果:
new Generate RandomArray()=>[924404,79,788585451267217153135]
new Generate RandomArray()=>[869697647,59,458,30、291、157、112、111]
new Generate RandomArray()=>[999,98,872,823,705,418,404,306,259,20]
new Generate RandomArray()=>[688666664615580565336304250246]
new Generate RandomArray()=>[920906759696673481429355 19103]
为什么有些数组的格式正确,而另一些的中间有一个非有序的数字?
我测试过:
- 将数字转换为字符串
- 访问数组中的无序元素(显然,它给出了相同的数字)
- 使用函数而不是构造函数执行
这并不能改变奇怪的结果。
我是不是错过了JS强制属性之类的东西?
感谢:)
sort
函数按字母数字/字母顺序进行排序(即"字符串排序")。就字符串而言,"aaa"在"b"之前,类似地,"111"在"2"之前。
要按数值排序,可以提供自己的比较函数。
array.sort(function(a, b) {
return a - b;
});
function GenerateRandomArray(){
var arr = [];
for (var i = 0; i < 10; i++) {
arr.push(Math.round(Math.random() * 1000));
}
arr.sort(function compareNumbers(a, b) {
return a - b;
});
return arr;
}
使用
return array.sort(function(a, b) {
return a - b;
}).reverse();
或者简单地说:
return array.sort(function(a, b) {
return b - a;
});
文档:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
报价:
默认的排序顺序是根据字符串Unicode代码点。
如果未提供compareFunction,则通过将元素转换为字符串并按Unicode代码点顺序比较字符串来对元素进行排序。例如;香蕉;在";樱桃";。在数字排序中,9在80之前,但由于数字被转换为字符串;80〃;在";9〃;按Unicode顺序。
要比较数字而不是字符串,比较函数可以简单地从a减去b。
还有一件事:
这是一个返回随机数数组(已排序)的函数,因此不应与new
关键字一起使用,因为您没有将其用作构造函数。另外,根据个人喜好,我可能将函数命名为getRandomNumberArray
或getArrayOfRandomNumbers
。
样品:https://jsfiddle.net/cmfoo49m/2/
- 意外结果,在 ASP.Net 中解析 JSON 对象的数组
- Javascript 数组反向函数意外行为
- 使用变量初始化数组:意外的令牌 +
- 在 JS 中短路空数组会产生意外结果:“[] ||真 == []'
- 推入数组会产生意外的结果
- JavaScript在数组内迭代数组的意外行为
- JavaScript数组-意外的令牌
- JavaScript:推送到空数组中的意外行为
- 意外的类型错误 - Javascript,多维数组
- 在用数组填充初始化的数组上使用数组映射的意外行为
- 切换句柄多维数组.意外结果
- 随后的多维数组排序会产生意外的结果
- 将数组项用作对象中的键时出现意外的令牌错误
- 从数组中拼接出意外的元素
- JavaScript中2D数组的值发生意外更改
- JavaScript 二维数组填充中的意外输出
- 将字段插入子文档数组中.意外行为
- AngularJS分析JSON数组对象意外的令牌:
- 意外标记d'当尝试将对象添加到Javascript对象数组时
- 数组参数解构抛出意外错误