当我们开发抽奖程序时,经常需要配置不同奖品的概率。
如:冰箱: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值。