抽奖函数(给定概率)

作者: xilong | 来源:发表于2018-06-25 19:51 被阅读12次

    说实话,这个标题还不好描述,举个例子:一等奖,1%;二等奖5%;三等奖:10%;谢谢惠顾:84%;
    然后写一个随机抽奖的函数,抽出来的概率 符合上面定义。

    let gift=['一等奖:宝马X6', '二等奖:苹果三件套', '三等奖:威戈背包', '谢谢惠顾!'];
    //把概率转换为 正数组(一般乘分母就行了)
    let probability = [1, 5, 10, 84];
    
    // 这是 固定概率函数,方便理解但是不灵活
    function goodluck(a, b) {
        var random = (1 + 5+ 10+ 84) * Math.random();   //因为 Math.random()是生成 [0,1) 随机数,左闭右开
        if(random <84){
            return a[3];
        } else if(random < 94){
            return a[2];
        } else if(random <99){
            return a[1];
        } else {
            return a[0];
        }
    };
    
    // 这个可以直接使用
    function goodluckAll(obj, luck) {
        let sum = 0,
            factor = 0,
            random = Math.random();
    
        for(let i = luck.length - 1; i >= 0; i--) {
            sum += luck[i]; // 统计概率总和
        };
        random *= sum; // 生成概率随机数
        for(let i = luck.length - 1; i >= 0; i--) {
            factor += luck[i];
            if(random < factor) return obj[i];
        };
    };
    
    // 试一试
    let gift=['一等奖:宝马X6', '二等奖:苹果三件套', '三等奖:威戈背包', '谢谢惠顾!'];
    let probability = [1, 5, 10, 84];
    console.log(goodluckAll(gift, probability));

    相关文章

      网友评论

        本文标题:抽奖函数(给定概率)

        本文链接:https://www.haomeiwen.com/subject/hgquyftx.html