JavaScript会生成除某些值之外的随机数

Dev*_*vEx 4 javascript

我通过调用生成1到20的随机数generateRandom().如何排除某些值,例如8和15?

function generateRandom(min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

var test = generateRandom(1, 20)
Run Code Online (Sandbox Code Playgroud)

小智 10

它应该是代替

function generateRandom(min, max) {
    var num = Math.floor(Math.random() * (max - min + 1)) + min;
    return (num === 8 || num === 15) ? generateRandom(min, max) : num;
}

var test = generateRandom(1, 20)
Run Code Online (Sandbox Code Playgroud)

  • 我已经尝试过这个解决方案,当递归太深时,它将停止在浏览器中工作。浏览器阻止代码继续循环。此外,对于移动解决方案(我现在正在测试的)甚至是一个大问题。我更喜欢@Bathsheba 推荐或随机减去/添加一个数字。 (4认同)

Bat*_*eba 6

保持生成器统计特性的一种方法是在[1,18]中生成一个数字.然后按此顺序申请:

  1. 如果数字是8或更多,请添加1.

  2. 如果数字是15或更多,请添加1.

我不愿意拒绝和重新采样,因为这会导致相关平原出现在线性同余生成器中.

  • 这意味着 9 和 16 的返回频率是其他数字的两倍。不确定OP是否关心... (2认同)