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

JS中使用includes检查数组是否包含生成的随机数失效如何解决

问题原因

JavaScript 中 Array.includes() 底层使用**严格相等运算符(===)**做匹配判断,你的done数组存储的是字符串类型的题目编号('1'、'2'),而Math.random逻辑生成的随机值是数字类型,二者类型不匹配,严格相等判断会直接返回false,所以变量传参时校验不生效。传入固定字符串'1'时类型和数组元素一致,所以校验可以正常触发。

解决方案

方案1:将生成的随机数转为字符串,和数组元素类型匹配

function NextQuestion() {
  let done = ['1','2'];
  // 随机数生成后转字符串
  let random = (Math.floor((Math.random() * 10) + 1)).toString();
  let include = done.includes(random);  
  if (include) {
    alert('true');
  }
}

方案2:将done数组的元素改为数字类型,和随机值类型匹配

function NextQuestion() {
  // 数组存储数字类型的题目编号
  let done = [1,2];
  let random = Math.floor((Math.random() * 10) + 1);
  let include = done.includes(random);  
  if (include) {
    alert('true');
  }
}

如果需要完整实现获取未使用题目的逻辑,可以参考递归实现:

// 入参为已完成题目的数组,返回可用的随机题目编号
function getValidQuestion(done) {
  const random = Math.floor((Math.random() * 10) + 1);
  // 这里根据你done数组的存储类型选判断逻辑,如果是字符串数组就转random为字符串
  if (!done.includes(random)) return random;
  // 命中已完成题目,重新生成
  return getValidQuestion(done);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 00:45:03