选择要根据百分比运行的函数[重复]

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

我想知道如何根据百分比选择要运行的功能。例如,function1()可能有60%的跑步几率,function2()可能有30%的跑步几率,而function3()可能有10%的跑步几率。

我是用Javascript编写的,但是给出的任何代码都不是必需的。

我将希望使用3个以上的功能,并且还能够轻松修改百分比。为了简单起见,我只是把它削减到了3。

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

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

然后我将生成1到100之间的随机数,循环通过对象键并根据随机生成的数字出现的范围运行函数。这对我来说似乎不对,为了调整百分比而涉及太多混乱。另外,我觉得我正在重新发明轮子。

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

language-agnostic
1个回答
1
投票

首先想到的是使用某种加权随机。谷歌搜索带我到这个npm module以及过去的stackoverflow答案: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,而不是百分比。

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