基于权重的随机数JS实现

本文介绍了如何使用JavaScript实现一个基于权重的随机抽奖功能。通过根据权重创建数组并进行随机选择,来达到不同奖项不同概率的效果。同时,文章还讨论了在奖品数量有限且有中奖概率限制的情况下,如何动态计算中奖率并决定是否中奖。
摘要由CSDN通过智能技术生成

最近项目中需要实现一个基于权重的抽奖功能。例如抽中物品1的权重为2,抽中物品2的权重1。那么,物品1的概率就是1/3,物品2的概率就是2/3。

实现的主要思想,是基于数组实现的。

如下程序所示:如1的权重为1,则在数组中插入1个1,2的权重为2,则插入两个2。再对数组[1,2,2]进行随机拿去,就能实现基于权重的随机数了。

function weightRandom(curValue) {
    var randomConfig = [{id:1,weight:2},{id:2,weight:1}];
    var randomList = [];
    for (var i in randomConfig) {
        for (var j = 0; j < randomConfig[i].weight; j++) {
            randomList.push(randomConfig[i].id);
        }
    }
    var randomValue = randomList[Math.floor(Math.random() * randomList.length)];
    if (curVal != 0) {
        while (randomValue == curVal ) {
            randomValue  = randomList[Math.floor(Math.random() * randomList.length)];
        }
    }
    return randomValue ;
};

再补充一点:如果需求是奖池类型的,对每个奖品的获取数量是有限的,超过限制的默认为鼓励奖的话。可以这样去实现:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值