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]
}
}
複製代碼