fat-cat

JS 简单实现:根据奖品权重计算中奖概率实现抽奖

// 设置奖项名称、权重
const prizes = ['一等奖', '二等奖', '三等奖', '未中奖']
const weights = [1, 5, 20, 74]

// 计算权重之和
const weightSum = weights.reduce((a, sum) => sum + a, 0)

// 根据权重和值 weightSum, 生成介于 0-weightSum 之间的权重随机数
const lottery = () => {
    // 生成介于 0-weightSum 之间的权重随机数, 假设 30
    const random = Math.random() * weightSum

    const nextWeights = weights.concat(random) // [1, 5, 20, 74, 30]
    const sortedWeights = nextWeights.sort((a, b) => a - b) // [1, 5, 20, 30, 74]

    // 索引权重随机数的数组下标
    const randomIdx = sortedWeights.indexOf(random) // 3
    const prizeIdx = Math.min(randomIdx, prizes.length - 1) // 3

    // 本次抽奖的结果
    return prizes[prizeIdx]
}