【发布时间】:2012-05-28 12:13:35
【问题描述】:
我想用javascript生成50个不重复的随机数,数字在1到50之间,怎么实现呢?50个数字存储在一个数组中。
【问题讨论】:
标签: javascript
我想用javascript生成50个不重复的随机数,数字在1到50之间,怎么实现呢?50个数字存储在一个数组中。
【问题讨论】:
标签: javascript
首先生成一个有序列表:
var i, arr = [];
for (i = 0; i < 50; i++) {
arr[i] = i + 1;
}
然后随机播放。
arr.sort(function () {
return Math.random() - 0.5;
});
我测试了上述方法,效果很好。但是,ECMAScript 规范并不要求 Array.sort 以这种方法生成真正随机列表的方式实现 - 因此虽然它现在可能有效,但结果可能会在没有警告的情况下发生变化。下面是 Fisher-Yates shuffle 的一个实现,它不仅保证产生合理的随机分布,而且比劫持排序更快。
function shuffle(array) {
var p, n, tmp;
for (p = array.length; p;) {
n = Math.random() * p-- | 0;
tmp = array[n];
array[n] = array[p];
array[p] = tmp;
}
}
【讨论】:
push 方法而不是向其中添加元素。 jsfiddle.net/KUfcf
push 比直接赋值稍慢,所以(在这种情况下)我认为最好使用 [i]。