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

如何实现生成1-10间不在指定数组中的随机数的JS函数

实现一个生成不在指定数组中的1-10随机数的函数

没问题,我来帮你搞定这个需求,顺便修正下你提供的示例代码里的小问题。首先明确需求:写一个以数组为参数的函数,持续生成1-10之间的随机数,直到得到一个不在传入数组里的数,然后返回这个数。

简洁的正确实现

这里用ES6的includes方法来简化判断,代码清晰易懂:

function getRandomNotInArray(arr) {
  let randomNum;
  // do...while确保至少生成一次随机数,再检查是否符合条件
  do {
    // 生成1-10的随机数:Math.random()*10得到0~9.999...,取整后加1变成1~10
    randomNum = Math.floor(Math.random() * 10) + 1;
  } while (arr.includes(randomNum)); // 如果数在数组里,继续循环生成新数
  return randomNum;
}

// 测试用例
const testArray = [1, 2, 4, 7];
console.log(getRandomNotInArray(testArray)); // 会输出3、5、6、8、9、10中的一个

兼容旧环境的版本(不用ES6 includes)

如果需要兼容不支持includes的旧浏览器,可以自己写一个数组判断函数:

function isNumberInArray(arr, num) {
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] === num) {
      return true;
    }
  }
  return false;
}

function getRandomNotInArray(arr) {
  let randomNum;
  do {
    randomNum = Math.floor(Math.random() * 10) + 1;
  } while (isNumberInArray(arr, randomNum));
  return randomNum;
}

说说你示例代码里的问题

你的contains函数有几个逻辑问题:

  • 没有把数组作为参数传入,直接用全局arr不是好的编程习惯,而且如果函数在其他地方调用时没有全局arr会报错;
  • 循环逻辑错误:一旦找到数组里存在的数,就直接return false退出函数,没法继续生成新的随机数;check变量的设置也没起到循环迭代的作用,因为第一次匹配就直接return了,不会进入下一次while循环。

内容的提问来源于stack exchange,提问作者J. Thomas Dufey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:15:15