JS生成5个1-100不重复随机数数组的代码正误咨询
问题解答
你当前的实现无法满足生成5个1-100无重复随机数的需求,作为只学了8天JS的新手,敢自己动手写循环尝试已经很棒,下面直接给你拆解代码里的问题,以及好理解的正确写法。
现有代码的核心问题
Math.random()API使用错误:这个方法本身不需要传入参数,你写的Math.random(num)里传入固定为0的num没有任何作用;且现有逻辑Math.floor(Math.random()*100)生成的是0-99区间的整数,不符合你要的1-100的数值范围要求。- 去重判断的对象完全错了:初始状态下
arr是空数组,第一次循环时x=4,arr[x]也就是arr[4]根本不存在,值为undefined。你需要判断的是新生成的随机数是否已经在数组中存在,而不是去判断数组还没填充的位置的元素。 - 分支判断完全无效:你写的
if/else if/else三个分支里,执行的代码全都是直接往数组push新随机数,不管判断结果是什么都不会拦截重复值,等于这段判断写了和没写一样,最终生成的数组很容易出现重复元素。
新手友好的正确实现
逻辑非常直白,不需要复杂写法,顺着需求一步步写就行:
let arr = [] // 只要数组没凑够5个元素,就一直循环生成 while (arr.length < 5) { // 生成1-100之间的随机整数 const randomNum = Math.floor(Math.random() * 100) + 1 // 检查随机数是否已经在数组里,没存在过才加进去 if (!arr.includes(randomNum)) { arr.push(randomNum) } } console.log(arr)
这个写法不用提前固定循环次数,每次生成随机数先做重复校验,从根源上避免重复值加入数组,逻辑简单不容易写错,很适合刚入门的阶段使用。
内容的提问来源于stack exchange,提问作者Leonard 356
相关产品推荐
相关产品推荐

