随机选择器:抽奖、分组、随机排序的实用场景
随机选择器在生活中有广泛应用。本文介绍随机选择器的实现和应用场景。
应用场景
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 算法可以保证公平性。