如何使用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
相关产品推荐
相关产品推荐

