当前位置:首页 > JavaScript

js实现随机摇号

2026-01-31 03:14:57JavaScript

随机摇号实现方法

基础随机数生成

使用Math.random()生成0到1之间的随机数,结合Math.floor()Math.ceil()实现整数范围随机:

js实现随机摇号

function getRandomInt(min, max) {
  return Math.floor(Math.random() * (max - min + 1)) + min;
}
// 示例:生成1-100的随机数
const randomNum = getRandomInt(1, 100);

数组元素随机抽取

使用Fisher-Yates洗牌算法实现公平随机抽取:

js实现随机摇号

function shuffleArray(array) {
  for (let i = array.length - 1; i > 0; i--) {
    const j = Math.floor(Math.random() * (i + 1));
    [array[i], array[j]] = [array[j], array[i]];
  }
  return array;
}
// 示例:从10人中随机抽取3人
const people = ['张三','李四','王五','赵六','钱七','孙八','周九','吴十','郑十一','王十二'];
const shuffled = shuffleArray([...people]).slice(0, 3);

权重随机算法

对于需要加权随机的情况(如不同概率中奖):

function weightedRandom(weights) {
  const sum = weights.reduce((a, b) => a + b, 0);
  let rand = Math.random() * sum;
  for (let i = 0; i < weights.length; i++) {
    if (rand < weights[i]) return i;
    rand -= weights[i];
  }
}
// 示例:三个奖项的中奖概率分别为50%,30%,20%
const prizeIndex = weightedRandom([50, 30, 20]);

时间种子增强随机性

为防止预测,可结合时间因素增强随机性:

function seededRandom(seed) {
  const x = Math.sin(seed) * 10000;
  return x - Math.floor(x);
}
// 使用当前时间戳作为种子
const randomValue = seededRandom(Date.now());

完整摇号系统示例

class LotterySystem {
  constructor(participants) {
    this.participants = participants;
    this.winners = [];
  }

  drawWinners(count) {
    const pool = [...this.participants];
    while (this.winners.length < count && pool.length > 0) {
      const index = Math.floor(Math.random() * pool.length);
      this.winners.push(pool.splice(index, 1)[0]);
    }
    return this.winners;
  }

  reset() {
    this.winners = [];
  }
}
// 使用示例
const lottery = new LotterySystem(['A','B','C','D','E']);
console.log(lottery.drawWinners(2)); // 随机选出2名

标签: js
分享给朋友:

相关文章

js实现验证

js实现验证

验证表单输入 使用JavaScript验证表单输入是常见的需求。可以通过监听表单提交事件,检查输入字段是否符合要求。 document.getElementById('myForm').addEve…

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数: fun…

js实现图片滚动

js实现图片滚动

图片滚动的实现方法 使用CSS动画实现 通过CSS的animation和@keyframes可以实现简单的图片滚动效果。这种方法适合静态图片的无缝循环滚动。 <style> .scr…

js实现筛选

js实现筛选

JavaScript 实现数据筛选的方法 使用 Array.filter() 方法 Array.filter() 是 JavaScript 中最常用的筛选方法,它会创建一个新数组,包含通过回调函数测试…