选择要根据百分比运行的函数[重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了选择要根据百分比运行的函数[重复]相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
我想知道如何根据百分比选择要运行的功能。例如,function1()
可能有60%的跑步几率,function2()
可能有30%的跑步几率,而function3()
可能有10%的跑步几率。
我是用javascript编写的,但是给出的任何代码都不是必需的。
我将希望使用3个以上的功能,并且还能够轻松修改百分比。为了简单起见,我只是把它削减到了3。
我已经考虑过将所有函数放在一个对象中:
var funcs = {
'1-10': func3(){},
'11-40': func2(){},
'41-100: func1(){}
}
然后我将生成1到100之间的随机数,循环通过对象键并根据随机生成的数字出现的范围运行函数。这对我来说似乎不对,为了调整百分比而涉及太多混乱。另外,我觉得我正在重新发明轮子。
请有人建议一种更易于管理和更优雅的方式来实现这一目标吗?
答案
首先想到的是使用某种加权随机。谷歌搜索带我到这个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,而不是百分比。
以上是关于选择要根据百分比运行的函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章