You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用JavaScript生成两个0到4之间且互不相等的随机数

JavaScript生成两个0-4不重复随机数的实现方案

这里提供两种常用的可行实现,都能100%保证两个值不重复:

方案1:重试生成法(适配你现有代码逻辑,最简单)

直接用do...while循环控制第二个随机数的生成,直到和第一个值不相等为止,因为取值范围只有5个数字,重试概率极低,性能完全不受影响:

state.blue_id = Math.floor(Math.random() * 5);
// 生成red_id时如果和blue_id相等就重新生成,直到不相等
do {
  state.red_id = Math.floor(Math.random() * 5);
} while (state.red_id === state.blue_id);

如果你一定要保留你写的if判断结构,也可以在判断分支里递归重新生成两个值,不过不如循环写法简洁直观,也更容易出现逻辑漏洞。

方案2:抽牌法(逻辑上完全杜绝重复,扩展性更强)

先把所有可选值存入数组,随机抽取第一个值后从数组中移除,再从剩余值里抽取第二个值,从根源上避免了重复的可能,后续如果要生成更多不重复的随机数也可以直接扩展:

// 初始化所有可选的0-4数值
const availableNums = [0, 1, 2, 3, 4];
// 抽第一个值
const blueIdx = Math.floor(Math.random() * availableNums.length);
state.blue_id = availableNums.splice(blueIdx, 1)[0];
// 从剩下的值里抽第二个
const redIdx = Math.floor(Math.random() * availableNums.length);
state.red_id = availableNums[redIdx];

注意事项

比较两个值是否相等时推荐用严格相等===代替==,避免隐式类型转换带来的异常判断问题。

内容的提问来源于stack exchange,提问作者Rowan_B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 21:45:02