随机返回三个选项之一的函数,其中所有选项都有完全相同的机会?

问题描述 投票:0回答:5

我知道以前可能有人问过这个问题,但我正在尝试让 Javascript 函数返回三个选项之一。问题是每个选项的机会应该完全相等。 这是我到目前为止所拥有的:

var choice = Math.random();
if (choice <= 0.34) {
    choice = "option1";
} else if (choice <= 0.67) {
    choice = "option2";
} else {
    choice = "option3";
}

这已经相当准确了,但是“选项3”的概率稍微低一些。我如何重新表述这一点以使每个选项都有相同的发生机会?我更喜欢一个不涉及在 if 条件或类似条件中使用“0.3333333333333333...”的解决方案。

javascript random
5个回答
6
投票

我认为这样做会更干净、更简单:

var options = ["option1", "option2", "option3"];
var choice = options[Math.floor(Math.random()*options.length)];

3
投票

基本上是你的 + Alex 的解决方案,但我发现它更漂亮

options=['option1','option2','option3']
choice = options[Math.floor(Math.random()*options.length)]

2
投票

将随机数乘以 3 将允许您在不使用小数或分数的情况下完成此操作:

var choice = Math.random() * 3;
if (choice <= 1) {
    choice = "option1";
} else if (choice <= 2) {
    choice = "option2";
} else {
    choice = "option3";
}

2
投票

尝试这种硬派风格:

var choice = ['first', 'second', 'third'][Math.floor(Math.random()*3)]

0
投票

我认为

var choice = ['first', 'second', 'third'] [Math.floor(Math.random()*3) +1]

加1将得到从1到3的随机数,只需3次乘法我们就得到从0到2的数字。

© www.soinside.com 2019 - 2024. All rights reserved.