根据百分比选择函数 运行

Choosing a function to run based on percentages

我想知道如何根据百分比选择函数 运行。例如,function1() 可能有 60% 的机会 运行ning,function2() 可能有 30% 的机会 运行ning 而 function3() 可能有 10 运行宁的几率 %。

我在 Javascript 中写这篇文章,但给定的任何代码都不是必需的 Javascript。

我会想要使用 3 个以上的函数,并且能够轻松修改百分比。为了简单起见,我只是将它减少到 3 个。

我考虑过将所有函数放在一个对象中:

var funcs = {
  '1-10':  func3(){},
  '11-40': func2(){},
  '41-100: func1(){}
}

然后我会生成一个 1 到 100 之间的随机数,循环遍历对象键和 运行 基于随机生成的数字出现的范围的函数。这对我来说似乎不合适,因为为了调整百分比而涉及太多的混乱。另外,我觉得我正在重新发明轮子。

有人可以建议一种更易于管理和更优雅的方法来实现这一目标吗?

首先想到的是使用某种加权随机数。谷歌搜索将我带到这个 npm module 以及过去的 Whosebug 答案: Generate A Weighted Random Number

基于该答案:

function weightedRand2(spec) {
  var i, sum=0, r=Math.random();
  Object.keys(spec).some(it => {
    sum += parseFloat(it)
    if (r <= sum) {
      spec[it]()
      return true
    }
  })
}

weightedRand2({0.1: function() {console.log(10)}, 0.3:function() {console.log(30)}, 0.6:function() {console.log(60)}});

这使用总和为 1 的小数,而不是百分比。