js实现自定义概率抽奖算法

当我们开发抽奖程序时,经常需要配置不同奖品的概率。

如:冰箱:30%,电脑:10%,洗衣机:50%。

可用以下函数实现:

getResult(arr){
  var leng = 0;
  for(var i = 0; i<arr.length; i++){
      leng += arr[i]                                     //获取总数
  }
  for(var i = 0; i < arr.length; i++){
      var random = parseInt(Math.random()*leng);       //获取 0-总数 之间的一个随随机整数
      if(random < arr[i]){
          return i                                     //如果在当前的概率范围内,得到的就是当前概率
      }
      else {
          leng -= arr[i]                                 //否则减去当前的概率范围,进入下一轮循环
      }
  }
} 

这个函数首先将输入数组,如[30,10,50]进行相加,求出总和作为概率分母。

再取0到总和之间的随机数,再确定这个数是在哪个区间上。

从数组的前面到后面,如果该数大于区间长度,则减去区间长度,继续循环,直到找到该数所在区间,就返回对应的列表下标值。

最后,用

list[getResult(arr)]['name']

即可获得该奖品的name值。

原文地址:https://www.cnblogs.com/luoyihao/p/14671802.html