You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JS中编写符合特定抽奖规则的概率返回布尔值函数

解决方案

核心实现思路

  • 前4次按自定义概率正常抽奖
  • 第5次做保底逻辑:如果前4次均未中奖,第5次强制中奖,保证5次循环里至少1次返回true
  • 奖品支持单独配置中奖概率,按权重加权随机抽取

完整代码

// 奖品配置:可自定义每个奖品的中奖概率,数值为概率分母,比如10000对应1/10000的中奖概率
const prizes = [
  { name: '奖品1', probability: 10000 },
  { name: '奖品2', probability: 5000 },
  { name: '奖品3', probability: 1000 },
  { name: '奖品4', probability: 500 },
  { name: '奖品5', probability: 100 },
  { name: '奖品6', probability: 50 },
  { name: '奖品7', probability: 10 },
  { name: '奖品8', probability: 5 }
]

// 基础概率函数:传入概率分母,返回1/n概率的布尔值(true代表中奖)
function prob(n) {
  return Math.floor(Math.random() * n) === 0
}

// 按配置概率从奖品列表中随机抽取1个奖品
function drawPrize(prizeList) {
  // 计算所有奖品的总权重
  const totalWeight = prizeList.reduce((sum, prize) => sum + 1 / prize.probability, 0)
  let randomVal = Math.random() * totalWeight
  for (const prize of prizeList) {
    randomVal -= 1 / prize.probability
    if (randomVal <= 0) return prize.name
  }
  // 兜底返回最后一个奖品
  return prizeList[prizeList.length - 1].name
}

// 主函数:执行5次抽奖,保证至少1次中奖
function runLottery(baseProbability = 100) {
  let hasWon = false
  // 执行前4次抽奖
  for (let i = 0; i < 4; i++) {
    const isWin = prob(baseProbability)
    if (isWin) {
      const winPrize = drawPrize(prizes)
      console.log(`第${i+1}次抽奖:中奖,获得${winPrize}`)
      hasWon = true
    } else {
      console.log(`第${i+1}次抽奖:未中奖`)
    }
  }
  // 第5次保底逻辑
  const fifthWin = hasWon ? prob(baseProbability) : true
  if (fifthWin) {
    const winPrize = drawPrize(prizes)
    console.log(`第5次抽奖:中奖,获得${winPrize}`)
    return true
  } else {
    console.log(`第5次抽奖:未中奖`)
    return false
  }
}

// 测试:基础中奖概率设为1/100,执行抽奖
runLottery(100)

自定义调整说明

  • 调整整体单次中奖概率:调用runLottery时传入对应分母即可,比如要1/10000的基础中奖概率,就写runLottery(10000)
  • 调整单个奖品中奖概率:直接修改prizes数组中对应奖品的probability值,数值越大中奖概率越低
  • 如果更习惯用0~1的小数表示概率,可以替换prob函数为以下实现:
// 传入0~1的概率值,比如1/10000传0.0001
function prob(rate) {
  return Math.random() < rate
}

内容的提问来源于stack exchange,提问作者Yuri Alves

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 16:36:00