直接随机法
直接通过随机函数,获取奖品池的下标,得出奖品。这种方法的特点是:所有奖品概率相同,包括抽不中的概率。
# 奖品池
var nice = [0.0, 5.0, 1.11, 6.1, 3.3, 2.2, 0.01, 6.1];
# 抽奖方法
var index=parseInt(Math.random() * 12) + 1
alert("小朋友今天获得的小红包是: " + nice[index - 1] + " ¥");
奖品设置概率法
根据奖品概率,将0-99或者0-999等范围的数字有规则的划分,然后根据生成的范围内的随机数,判断所抽到奖品的概率。这种方法的特点是:奖品概率设置越大,奖品被抽到的几率也越大。
# 奖品池
turnplate.restaraunts = ["谢谢惠顾", "比心", "豪华大奔", "豪华游艇", "黄瓜", "棒棒糖", "红色砖石", "超级跑车", "粉色佳人"];
# 奖品概率
turnplate.randomRate = ["30%", '20%', '5%', '5%', '10%', '10%', '5%', '5%', '5%', '5%'];
# 抽奖方法 rate:奖品概率
function rnd(rate){
console.log(rate)
var random = Math.floor(Math.random() * 100);
console.log(random)
var myRandom = [];
var randomList = [];
var randomParent = [];
for(var i = 0; i < 100; i++){
myRandom.push(parseInt([i]) + 1);
}
console.log(myRandom)
for(var i = 0; i < rate.length; i++){
var temp = [];
var start = 0;
var end = 0;
randomList.push(parseInt(rate[i].split('%')[0]));
for(var j = 0; j < randomList.length; j++){
start += randomList[j-1] || 0
end += randomList[j]
}
temp = myRandom.slice(start, end);
randomParent.push(temp)
}
console.log(randomList)
console.log(randomParent)
for(var i = 0; i < randomParent.length; i++){
if($.inArray(random, randomParent[i]) > 0){
console.log(i+1)
return(i+1)
}
}
}
幸运值法
根据幸运值的大小,生成一定范围(奖品数量—无穷大)奖品池,然后将奖品对象加入奖品池,其余的放入空对象,通过随机一个范围内的值作为下标,取出对象,对象中的值,就是奖品,为空则是没奖品。当幸运值达到一定值(如大于等于80)得时候,奖品池的范围就是奖品的数量,此时抽取,则必定中奖,只是奖品随机。这种方法的特点是:中奖与没中奖随着幸运值的变化而变化,但是中奖物品的概率都是相同的。
# 奖品池
{
"list": [{
"id": 0,
"name": "AirPods",
"src": "https://img11.360buyimg.com/n1/s450x450_jfs/t1/29861/36/11965/55492/5c9352f7E5302d7a8/dd359563dc751ca5.jpg"
}, {
"id": 1,
"name": "西湖坐船",
"src": "https://dss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=2442400547,280609706&fm=26&gp=0.jpg"
}, {
"id": 2,
"name": "情侣手机壳",
"src": "https://dss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=702192816,2336825531&fm=26&gp=0.jpg"
}, {
"id": 3,
"name": "杭州乐园",
"src": "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1584796310964&di=a0bc805b921653aa990e0953854c8313&imgtype=0&src=http%3A%2F%2Fimg1.qunarzz.com%2Fwugc%2Fp225%2F201206%2F07%2F13adf3c6c9d08c2d93835fbb.jpg_r_1024x683x95_65c170c1.jpg"
}, {
"id": 4,
"name": "看电影",
"src": "https://dss1.baidu.com/70cFfyinKgQFm2e88IuM_a/forum/pic/item/34fae6cd7b899e51d22ff15348a7d933c9950dd0.jpg"
}, {
"id": 6,
"name": "一只口红",
"src": "https://dss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=2421182237,279894059&fm=26&gp=0.jpg"
}],
"total": 6
}
# 抽奖方法
function getRandomGift(gift) {
const len = gift.length;
const pool = [];
// 根据幸运值判断
const poolLen = luckNumber >= 80 ? len : Math.ceil(len * 100 / (luckNumber + 20));
console.log(poolLen)
for (let i = 0; i < poolLen; i ++) {
pool.push({});
}
console.log(pool)
for (let j = 0; j < len; j ++) {
const index = parseInt(Math.random() * poolLen);
if (pool[index].name) {
j --;
continue;
}
pool[index] = gift[j];
}
console.log(pool)
const randomIndex = parseInt(Math.random() * poolLen);
console.log(randomIndex)
return pool[randomIndex] || {}
}