1 先配置奖品数据,好比4个奖品类型,一等奖几率1%,二等奖几率3%,三等奖几率6%,参与奖90%,设置以下git
var model = [{
name: '一等奖',
key: 'level1',
radio: 1,
},{
name: '二等奖',
key: 'level2',
radio: 3,
},{
name: '三等奖',
key: 'level3',
radio: 6,
},{
name: '参与',
key: 'level4',
radio: 90
}]
复制代码
配置好奖品后就能够初始化抽奖函数,执行抽奖github
var draw = new Draw(model);
var drawResult = draw.getResult();
复制代码
核心代码以下数组
function Draw(prizes) {
var prizeList = [] //按照权重分解后的奖品数组
prizes.map(function(item){
prizeList.push({
name: item.name,
value: item.key
})
for(var i=0; i< item.radio; i++) {
prizeList.push({
name: item.name,
value: item.key
})
}
});
prizeList = reset(prizeList);
// 范围随机数
function randomFrom(lowerValue, upperValue) {
return Math.floor(Math.random() * (upperValue - lowerValue + 1) + lowerValue);
};
// 随机打乱数组
function reset(arr) {
var eachArr = arr.concat([])
var lastArr = []
function deepEach(deepArr) {
if (deepArr.length) {
var randomIndex = randomFrom(0, eachArr.length - 1)
lastArr.push(eachArr[randomIndex])
eachArr.splice(randomIndex, 1)
deepEach(eachArr)
}
}
deepEach(eachArr)
return lastArr
}
this.getResult = function() {
var random = randomFrom(0, prizeList.length - 1);
return prizeList[random]
}
}
复制代码