当前位置:首页 > 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实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previo…

js实现全选

js实现全选

实现全选功能的方法 在JavaScript中实现全选功能通常涉及监听全选复选框的点击事件,并根据其状态控制其他复选框的选中状态。以下是几种常见的实现方式: 基础DOM操作实现 通过获取所有目标复选框…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

js实现求导

js实现求导

实现数值求导的方法 在JavaScript中实现求导通常采用数值方法,因为JavaScript不是符号计算语言。以下是常见的数值微分方法: 中心差分法 中心差分法提供较高精度的导数近似:…

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…