我正在使用Javascript,我想从数组中选择一个随机值。问题是,实际上我想以特定的比例进行选择。
这是什么意思?
我有以下价值 - 'INFO', 'CRITICAL', 'DEBUG', 'ERROR'
我想用以下比率选择值:
1. INFO - 30%
2. CRITICAL - 5%
3. DEBUG - 55%
4. ERROR - 10%
这就是我目前随机选择一个值的方式 -
var diffSev = ['INFO', 'CRITICAL', 'DEBUG', 'ERROR']
output['testSev'] = diffSev[Math.floor(Math.random() * diffSev.length)];
我想添加一个逻辑,用我需要的比率选择值。谢谢!!
您可以拥有一个大小为20的数组,其中包含标签的相对部分,并表示每个标签的确切百分比。 然后,您需要做的只是1-20的随机,结果将用作索引从数组中进行选择。
var diffSev = [
'CRITICAL',
'ERROR', 'ERROR',
'INFO', 'INFO', 'INFO', 'INFO', 'INFO', 'INFO',
'DEBUG', 'DEBUG', 'DEBUG', 'DEBUG', 'DEBUG', 'DEBUG', 'DEBUG', 'DEBUG', 'DEBUG', 'DEBUG', 'DEBUG'
]
return diffSev[Math.floor(Math.random() * 20)];
看概率的积分,而不是概率本身。
由于您使用的是名义值,因此订单不会影响功能,但通过最有可能首先对它们进行排序,您将会(不可检测)性能提升。
function getWeightedSeverity()
{
var cummprob =[0.55, 0.85, 0.95 , 1.0];
var labels =['DEBUG','INFO','ERROR','CRITICAL'];
var x=math.random();
var y=0;
for (y=0; y<cummprob.length, y++) {
if (cummprob[y]>=x) break;
}
return labels[y];
}
尝试类似的东西
var diffSev = ['INFO', 'CRITICAL', 'DEBUG', 'ERROR']
var rand = diffSev[Math.floor(Math.random() * 100)];
switch (rand) {
case rand < 30 :
output['testSev'] = diffSev[0]
break;
case rand > 30 && rand < 36:
output['testSev'] = diffSev[1]
break;
case rand > 35 && rand < 91:
output['testSev'] = diffSev[2]
break;
case rand > 90:
output['testSev'] = diffSev[3]
break;
}