随机选择器:抽奖、分组、随机排序的实用场景

介绍随机选择器的应用场景和实现方法,支持抽奖、分组、随机排序等功能。

实用工具 2026-06-08 6 分钟

随机选择器:抽奖、分组、随机排序的实用场景

随机选择器在生活中有广泛应用。本文介绍随机选择器的实现和应用场景。

应用场景

1. 抽奖

function draw(winners, count) {
  const shuffled = [...winners].sort(() => Math.random() - 0.5);
  return shuffled.slice(0, count);
}

// 使用
const participants = ['张三', '李四', '王五', '赵六'];
const winners = draw(participants, 2);

2. 随机分组

function randomGroups(members, groupCount) {
  const shuffled = [...members].sort(() => Math.random() - 0.5);
  const groups = Array.from({ length: groupCount }, () => []);
  
  shuffled.forEach((member, index) => {
    groups[index % groupCount].push(member);
  });
  
  return groups;
}

3. 随机排序(洗牌)

function shuffle(array) {
  const result = [...array];
  for (let i = result.length - 1; i > 0; i--) {
    const j = Math.floor(Math.random() * (i + 1));
    [result[i], result[j]] = [result[j], result[i]];
  }
  return result;
}

4. 随机题目

function randomQuestions(questions, count) {
  return shuffle(questions).slice(0, count);
}

在线工具

使用 jsjson.com 随机选择器

  • 随机抽取
  • 随机分组
  • 随机排序
  • 自定义列表

公平性保证

Fisher-Yates 洗牌算法

function fisherYatesShuffle(array) {
  const result = [...array];
  for (let i = result.length - 1; i > 0; i--) {
    const j = Math.floor(Math.random() * (i + 1));
    [result[i], result[j]] = [result[j], result[i]];
  }
  return result;
}

这是最公平的洗牌算法,每个排列出现的概率相等。

总结

随机选择器简单实用,在抽奖、分组、随机排序等场景中应用广泛。使用 Fisher-Yates 算法可以保证公平性。

📚 相关文章