如何使用JS生成1-50范围随机数并排除指定数组值 现有代码报错求修复
问题根源
- 代码中的判断逻辑仅校验了固定值
mainNum(即50)是否在排除数组中,完全没有对生成的随机数做排除校验,因此生成的结果自然会命中排除列表 - 当前逻辑等价于“只要50不在排除列表,就直接输出1-50之间的任意随机数”,和预期需求完全不匹配
修复方案
方案1:循环重试(适合排除项较少的场景)
生成随机数后判断是否在排除列表中,若是则重新生成,直到得到符合要求的数值:
let mainNum = 50 let exclNum = [4, 7, 10, 20, 35]; let randomNum; do { randomNum = Math.floor(Math.random() * mainNum) + 1; } while (exclNum.includes(randomNum)); console.log(randomNum);
方案2:预生成可用数组(适合排除项较多的场景)
先过滤得到所有符合要求的数值组成的数组,再从该数组中随机取值,可避免极端场景下的无效循环:
let mainNum = 50 let exclNum = [4, 7, 10, 20, 35]; // 生成1-50范围内所有不在排除列表中的数值 const availableNums = Array.from({length: mainNum}, (_, i) => i + 1) .filter(num => !exclNum.includes(num)); // 从可用数组中随机取一个值 const randomNum = availableNums[Math.floor(Math.random() * availableNums.length)]; console.log(randomNum);
内容的提问来源于stack exchange,提问作者Colorado Akpan
相关产品推荐
相关产品推荐

