假设我想按照百分比的机会来触发一个函数
function A () { console.log('A triggered'); } //50% chance to trigger
if (Math.random() >= 0.5) A();
现在我希望添加更多的功能来触发事件,我所做的是:
//method 1
function B () { console.log('B triggered'); } //10% chance to trigger
function C () { console.log('C triggered'); } //10% chance to trigger
if (Math.random() >= 0.5) {
A();
} else if (Math.random() > (0.5 + 0.1)) {
B();
} else if (Math.random() > (0.5 + 0.1 + 0.1)) {
C();
}
但这会使得
A()
在 B()
和 C()
之前优先执行。因此我将代码改为://method 2
var randNumber = Math.random();
if (randNumber <= 0.5) { A(); }
else if (randNumber > 0.5 && randNumber <= (0.5 + 0.1)) { B(); }
else if (randNumber > (0.5 + 0.1) && randNumber <= (0.5 + 0.1 + 0.1)) { C(); }
这种方法看起来是公平的,但因为需要在每个
if else
函数中硬编码机会,所以效率很低,并且如果我的功能和触发机会列表很长,我将需要使if else
变得非常冗长和混乱。问题是有没有更好、更高效的方法?不像上面展示的这两种方法。
*此外,公平而公正也很重要(听起来像一个游戏)
抱歉如果我表达不清楚,在此方面的任何帮助都将不胜感激。谢谢。
&&
前面的条件,因为它们总是为真。 - Ryan Searle