【问题标题】:How to pick a random value out of an array with a specific proportion?如何从具有特定比例的数组中选择一个随机值?
【发布时间】:2019-09-13 22:19:17
【问题描述】:

我正在使用 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)];

我想添加一个逻辑,该逻辑将选择具有我需要的比率的值。谢谢!!

【问题讨论】:

标签: javascript arrays random


【解决方案1】:

尝试类似的方法

 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;
}

【讨论】:

    【解决方案2】:

    看概率的积分,而不是概率本身。

    由于您使用的是标称值,因此顺序不会影响功能,但通过最有可能首先对它们进行排序,您将获得(无法察觉的)性能改进。

    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];
    }
    

    【讨论】:

      【解决方案3】:

      您可以有一个大小为 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)];
      

      【讨论】:

        猜你喜欢
        • 2020-02-10
        • 2011-05-18
        • 2013-11-05
        • 2012-02-21
        • 2022-11-06
        • 1970-01-01
        • 1970-01-01
        • 2012-04-13
        相关资源
        最近更新 更多