当前位置:首页 > 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
分享给朋友:

相关文章

css3结合js制作

css3结合js制作

CSS3 结合 JavaScript 制作动态效果 CSS3 和 JavaScript 结合可以实现丰富的动态效果,包括动画、交互和响应式设计。以下是几种常见的实现方式: CSS3 动画与 Java…

js实现vue

js实现vue

Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.…

js实现轮播图

js实现轮播图

基础轮播图实现 使用HTML、CSS和JavaScript实现一个简单的自动轮播图。HTML结构包含一个容器和多个图片项。 <div class="slider"> <div…

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas…

js实现图片轮播

js实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div cl…

js实现文件下载

js实现文件下载

使用 a 标签下载文件 通过动态创建 a 标签并设置 download 属性实现文件下载。适用于已知文件 URL 或 Blob 数据的情况。 function downloadFile(url,…