JavaScript 生成 50 个不重复的随机数

javascript to generate 50 no-repeat random numbers

本文关键字:随机数 生成 JavaScript      更新时间:2023-09-26

我想使用 javascript 生成 50 个不重复的随机数,并且该数字在 1 到 50 的范围内。存储在数组中的 50 个数字。

首先生成一个有序列表:

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;
    }
}