根据百分比选择函数 运行
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 的小数,而不是百分比。
我想知道如何根据百分比选择函数 运行。例如,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 的小数,而不是百分比。