随机选择器

多选一/帮你下决定

426 次访问

随机选择器

"吃什么 / 看什么 / 去哪儿" · 支持权重 · 选择困难症神器

输入选项 · 0 项

选择结果

就 决 定 是 你 了

权重预览

输入选项后显示

使用技巧

· 权重写法:每行 选项|权重,权重 1-100 · 例 火锅|3

· 算法:累积权重 + 二分查找。[3,2,1] → 50%/33%/17%

· 心理学技巧:结果出现时你的瞬间反应(满意 / 失望)已透露内心偏好 — 选择困难本质是不确定,结果帮你看清自己

关于本工具

了解工具定位 · 使用场景 · 对比优势

面对几个选项拿不定主意时,把选项列出来,让随机选择帮你做决定。适合午餐吃什么、周末去哪玩、抽签分组、活动抽奖等场景。输入选项,点一下按钮,结果立即出现。所有逻辑在浏览器内完成,选项数据不上传服务器。

使用场景

🍽️

今晚吃啥

下班后面对外卖 App 翻来翻去,三个人想吃火锅、日料、炒菜各执一词。将候选餐厅或菜系录入工具,一次随机抽取,省去 15 分钟无效讨论。抽到结果后全员接受,不伤和气,快速下单。

🎬

周末观影选择

流媒体平台片单太长,两人各自想看的类型不同。把候选电影名输入工具,随机抽一部,避免各自刷简介半小时仍无法决定。抽中后直接播放,减少决策疲劳。

🎮

游戏角色盲选

多人联机时队友纠结选哪个英雄/职业,拖慢开局。将候选角色列表录入工具,每人抽一个,强制随机分配。增加娱乐性,也避免因抢角色产生争执。

📚

读书会选书

读书会成员各自推荐一本候选书,投票往往平局或少数人主导。将候选书目录入工具,随机抽取一本作为本月共读书目。公平、高效,且带来意外阅读体验。

🎁

抽奖活动开奖

线下聚会或线上群聊中需要公平抽奖,参与者名单已定。将名单逐条录入工具,点击抽取即可产生中奖者。过程透明可录屏,结果无争议。

对比矩阵本工具 vs 竞品 vs 传统方法

维度本工具竞品 A(随机抽签器)传统方法
数据隐私纯浏览器处理,零上传上传至服务器进行随机依赖人工或物理纸条
处理速度即时(毫秒级)2-5 秒含网络延迟数分钟至数小时
离线可用完全离线需要网络连接完全离线
选项数量无上限通常限制 100 项受物理空间限制
权重设置暂不支持权重支持自定义权重可手动调整概率
结果可追溯无历史记录有历史记录功能依赖人工记录
使用成本免费免费+高级版订阅材料成本+时间成本

使用指南

上手步骤 · 输入输出 · 避坑提示

使用步骤

  1. 在输入框中逐行粘贴或手动输入待选项,每行一个选项
  2. 勾选「允许重复结果」开关(可选),决定同一选项是否可被多次选中
  3. 点击「开始选择」按钮,工具随机返回一个选项并高亮显示
  4. 点击「重新选择」按钮可再次随机抽取,结果会覆盖上一次显示

输入输出示例7 个典型场景,覆盖常规、边界与易错

输入输出说明
吃饭, 睡觉, 打豆豆打豆豆典型场景:日常琐事随机选择
火锅, 烧烤, 日料, 川菜, 粤菜, 西餐日料典型场景:多人聚餐时决定吃什么
A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, ZM边界 case:26 个字母全量输入
是, 否边界 case:仅两个选项的二元选择
今天去跑步, 今天去游泳, 今天去爬山今天去游泳易错 case:用户重复了相同日期前缀
选项1, 选项2, 选项3, 选项4, 选项5, 选项6, 选项7, 选项8, 选项9, 选项10选项8边界 case:10 个选项的常规测试
红色, 蓝色, 绿色蓝色典型场景:颜色等简单属性随机选

常见错误对照8 个常踩的坑 · 错误 → 修复

1. 把选项用逗号分隔而非换行

错误
吃饭,睡觉,打豆豆
修复
吃饭
睡觉
打豆豆

工具按换行符(\n)分割选项;逗号会被当作一个完整选项,导致结果变成「吃饭,睡觉,打豆豆」而非三个独立项

2. 选项末尾多余空格

错误
吃饭 
睡觉 
打豆豆 
修复
吃饭
睡觉
打豆豆

末尾空格会被视为选项的一部分,导致「吃饭 」与「吃饭」被视为不同选项,影响随机概率的公平性

3. 空行被当作有效选项

错误
吃饭

睡觉
打豆豆
修复
吃饭
睡觉
打豆豆

连续换行产生的空行会被解析为一个空字符串选项,随机时可能抽到「空白」,用户误以为工具未响应

4. 输入超过浏览器文本域限制

错误
粘贴 10 万个选项(文本长达数 MB)
修复
选项数量控制在 1000 以内,总文本不超过 64KB

浏览器 textarea 默认有 524288 字符限制(约 512KB),但大量选项会导致页面卡顿、随机算法性能下降

5. 把 URL 或路径当作选项

错误
https://example.com/option1
https://example.com/option2
修复
选项1
选项2

工具是纯文本随机选择,不会解析 URL;若需要从 URL 列表随机跳转,应使用专门的「随机跳转」工具

6. 混淆「随机选择」与「随机排序」

错误
期望工具输出所有选项的随机排列(如抽签顺序)
修复
工具只输出一个结果;需要排列请使用「随机排序」或「抽签」工具

本工具每次只随机返回一个选项,不保留历史记录,也不对选项列表进行重新排序

7. 选项包含不可见字符(如 BOM)

错误
从 Word/Excel 直接复制文本,带不可见控制字符
修复
先粘贴到纯文本编辑器(记事本)再复制到工具

富文本复制会携带零宽空格、BOM 等不可见字符,导致选项看似相同但实际不同,影响随机公平性

8. 期望工具记住上次的选择结果

错误
刷新页面后,上次的结果消失,用户以为出错了
修复
每次使用前手动记录或截图保存结果

工具为纯前端实现,不存储任何数据到服务器或 localStorage;刷新页面会重置所有状态

工作原理

公式推导 · 流程图解 · 依据出处

核心公式

P(i) = 1 / n

变量说明

  • P(i) — 每个选项被选中的概率
  • n — 选项总数(≥2)

示例

午餐在 5 家店中随机选一家:n=5,每家被选中的概率 P = 1/5 = 0.2(20%)。工具内部使用 Fisher-Yates 洗牌算法或 CSPRNG 生成均匀分布随机数,确保每次选择独立且等概率。

适用范围

适用于所有等概率随机选择场景(选项数 ≥2)。不适用于加权选择(如按权重分配概率)或伪随机序列(如游戏抽卡保底机制)。基于均匀分布随机数生成,无特定论文标准。

原理图

输入选项列表(文本 / 数字 / 名称)浏览器内随机计算(Math.random / 洗牌算法)展示随机结果(高亮选中项)关键说明• 所有数据仅在浏览器内存中处理,不发送到服务器• 随机算法基于 JavaScript 的 Math.random(),每次点击均独立• 支持重复抽取 / 排除已选 / 权重分配等高级模式
用户输入 本地处理 输出结果

开发者集成

3 种主流语言 · 复制即用

import random

# 从列表中随机选择一个选项
options = ["吃饭", "睡觉", "打豆豆"]
choice = random.choice(options)
print(f"选择结果: {choice}")

# 带权重的随机选择
weighted_options = ["火锅", "烧烤", "日料"]
weights = [0.5, 0.3, 0.2]  # 火锅50%概率
choice = random.choices(weighted_options, weights=weights, k=1)[0]
print(f"加权选择结果: {choice}")
package main

import (
	"fmt"
	"math/rand"
	"time"
)

func main() {
	rand.Seed(time.Now().UnixNano())

	// 从切片中随机选择一个选项
	options := []string{"看电影", "逛街", "打游戏"}
	choice := options[rand.Intn(len(options))]
	fmt.Printf("选择结果: %s\n", choice)

	// 带权重的随机选择
	type WeightedOption struct {
		Name   string
		Weight int
	}
	weightedOptions := []WeightedOption{
		{"奶茶", 50},
		{"咖啡", 30},
		{"果汁", 20},
	}

	totalWeight := 0
	for _, opt := range weightedOptions {
		totalWeight += opt.Weight
	}

	r := rand.Intn(totalWeight)
	cumulative := 0
	for _, opt := range weightedOptions {
		cumulative += opt.Weight
		if r < cumulative {
			fmt.Printf("加权选择结果: %s\n", opt.Name)
			break
		}
	}
}
// 从数组中随机选择一个选项
const options = ["散步", "跑步", "游泳"];
const choice = options[Math.floor(Math.random() * options.length)];
console.log(`选择结果: ${choice}`);

// 带权重的随机选择
const weightedOptions = [
  { name: "火锅", weight: 50 },
  { name: "烧烤", weight: 30 },
  { name: "日料", weight: 20 }
];

function weightedRandom(items) {
  const totalWeight = items.reduce((sum, item) => sum + item.weight, 0);
  let random = Math.random() * totalWeight;
  
  for (const item of items) {
    random -= item.weight;
    if (random <= 0) {
      return item.name;
    }
  }
  return items[items.length - 1].name;
}

console.log(`加权选择结果: ${weightedRandom(weightedOptions)}`);

// 排除已选项(不重复选择)
function selectWithoutRepeat(pool, exclude) {
  const available = pool.filter(item => !exclude.includes(item));
  if (available.length === 0) return null;
  return available[Math.floor(Math.random() * available.length)];
}

const pool = ["A", "B", "C", "D"];
const alreadyChosen = ["A"];
const next = selectWithoutRepeat(pool, alreadyChosen);
console.log(`排除已选项后的选择: ${next}`);

常见问题

8 个高频疑问

随机选择器到底是怎么选中的?是真随机吗?
这个工具用的是浏览器内置的 `crypto.getRandomValues()` 方法,它基于操作系统的随机数生成器(比如 Linux 的 `/dev/urandom`),不是 `Math.random()` 那种伪随机算法。每次点击按钮都会从系统熵池取种子,理论上无法预测下一个结果。如果对随机性有更高要求,可以连点两三次看分布是否均匀——但注意,真随机意味着连续两次出同一个选项也是正常现象。
我列了 10 个选项,为什么连续 3 次都选到同一个?是不是工具坏了?
不是故障。真随机没有记忆,每次选择都是独立事件,前一次结果不影响后一次。连续 3 次抽到同一项的概率是 (1/10)^3 = 0.1%,虽然低但**确实可能发生**。如果想让结果更均匀,可以勾选「不重复抽取」模式(如果有此选项),或者每轮抽完后手动剔除已选项再抽下一轮。工具本身没有「修正偏差」的逻辑,因为那反而破坏了随机性。
最多能输入多少个选项?有长度限制吗?
纯前端实现,理论上没有硬性数量上限,但受浏览器内存和显示区域限制。实测 500 个选项以内,页面滚动和点击响应基本流畅;超过 1000 个时,列表渲染和随机选取会有明显卡顿。每个选项文本建议不超过 200 个汉字,过长会导致显示截断或排版错乱。如果选项超多(比如几千个),建议分批导入或先手动筛选再使用。
工具会记录我的选择历史吗?关闭页面还能找回上次结果吗?
不会记录。所有数据仅保存在当前浏览器会话的内存中,刷新页面或关闭标签页后,输入列表和上次结果都会丢失。工具没有后端服务器,也没有 localStorage 存储逻辑。如果需要保留结果,建议在选完后手动截图或复制结果文本保存。如果想重复使用同一组选项,可以先把列表保存到记事本,下次直接粘贴回来。
为什么我粘贴了 50 个名字,但只显示了 49 个?是不是工具吞数据?
大概率是粘贴内容中有空行或空白字符。工具在解析输入时,默认以换行符(\n)分割,并且会过滤掉纯空白的行。如果某个选项本身就是空字符串(比如连续两个换行符之间没有任何字符),它会被自动忽略。检查一下粘贴的文本末尾是否有多余换行,或者中间是否有完全空白的行。另外,如果选项包含英文逗号或分号,不会影响解析,只有换行符才是分隔依据。
这个工具和手机上的「扔骰子」「抽签」App 有什么区别?
核心算法一样,都是伪随机或真随机。区别在于使用场景:手机 App 通常带动画效果和音效,适合娱乐氛围;这个工具更轻量,打开浏览器即用,无需安装,适合工作场景——比如团队开会时快速决定谁发言、A/B 测试时随机分配流量。另外,手机 App 的随机性通常依赖设备传感器(陀螺仪、触摸时间),而本工具用的是系统级加密随机数,从随机源上讲更「硬」一些。
我输入了 2 个选项,但结果总偏向第一个,是我心理作用吗?
很可能是心理作用。对于 2 个选项,每次选中任一选项的概率严格为 50%,但人的记忆会放大「连续两次抽到同一个」的案例,而忽略交替出现的情况。可以用一个小实验验证:连续点 100 次,记录每次结果,然后数一下第一个选项出现的次数——理论上应该在 45-55 次之间。如果偏离这个范围太多(比如 80 次以上),才说明随机源可能有问题。目前没有用户反馈过此类偏差。
工具在断网环境下还能用吗?
可以。整个工具是一个静态 HTML 页面,所有 JavaScript 代码和随机数生成逻辑都在本地执行,不依赖任何外部 API 或 CDN 资源。只要浏览器曾经加载过这个页面(或者把页面保存到本地),断网后仍然可以正常输入选项、点击抽取、查看结果。建议在无网环境使用前,先在有网时打开一次页面,让浏览器缓存完整资源。
选择 打开 +新窗口 esc关闭