当前位置:首页 > 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实现可视化抽签效果,包含动画和结果显示。

<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实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue-r…

js实现轮播

js实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的HT…

js实现倒计时

js实现倒计时

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

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在HT…

js jquery

js jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够…

js实现授权

js实现授权

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