当前位置:首页 > JavaScript

抽签js实现

2026-03-02 05:42:02JavaScript

抽签功能实现方法

基础抽签功能

使用JavaScript数组和随机数生成器实现简单抽签功能。准备一个包含选项的数组,通过随机索引选取其中一个元素。

function simpleDraw(names) {
  const randomIndex = Math.floor(Math.random() * names.length);
  return names[randomIndex];
}
const candidates = ['张三', '李四', '王五'];
console.log(simpleDraw(candidates));

权重抽签实现

当不同选项有不同权重时,可以使用累加权重的方法实现加权随机选择。先计算总权重,再根据随机数落在的区间决定选择哪个选项。

function weightedDraw(items) {
  let totalWeight = items.reduce((sum, item) => sum + item.weight, 0);
  let random = Math.random() * totalWeight;
  let weightSum = 0;

  for (const item of items) {
    weightSum += item.weight;
    if (random <= weightSum) return item.value;
  }
}
const weightedItems = [
  {value: '一等奖', weight: 1},
  {value: '二等奖', weight: 3},
  {value: '三等奖', weight: 6}
];
console.log(weightedDraw(weightedItems));

不重复抽签实现

需要从候选列表中抽取多个不重复的选项时,可以每次抽取后将该选项从数组中移除。

function uniqueDraw(names, count) {
  const result = [];
  const tempNames = [...names];

  while (result.length < count && tempNames.length > 0) {
    const randomIndex = Math.floor(Math.random() * tempNames.length);
    result.push(tempNames[randomIndex]);
    tempNames.splice(randomIndex, 1);
  }
  return result;
}
const students = ['小明', '小红', '小刚', '小丽'];
console.log(uniqueDraw(students, 2));

可视化抽签效果

结合HTML实现可视化抽签效果,包含动画和结果显示。

抽签js实现

<div id="result"></div>
<button onclick="startDraw()">开始抽签</button>

<script>
function startDraw() {
  const names = ['选项1', '选项2', '选项3', '选项4'];
  const resultEl = document.getElementById('result');
  let counter = 0;

  const interval = setInterval(() => {
    resultEl.textContent = names[Math.floor(Math.random() * names.length)];
    counter++;
    if(counter > 10) {
      clearInterval(interval);
      resultEl.textContent = simpleDraw(names);
    }
  }, 100);
}
</script>

注意事项

Math.random()生成的随机数在密码学上不安全,不适合安全敏感场景。前端实现应考虑防作弊机制,重要抽签建议在后端完成。多次抽签时注意性能问题,大数据集应考虑更高效的算法实现。

标签: js
分享给朋友:

相关文章

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callback) {…

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-containe…

使用js实现

使用js实现

使用JavaScript实现 JavaScript可以通过Math.random()函数生成随机数,结合其他方法可以实现多种随机数生成需求。 // 生成0到1之间的随机小数 const random…

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的JWT令牌…

js节流实现

js节流实现

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

js怎么实现异步

js怎么实现异步

异步实现方法 JavaScript中实现异步操作主要通过以下几种方式: Promise Promise是ES6引入的异步解决方案,用于处理异步操作的成功或失败状态。 const promise =…