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
相关产品推荐
相关产品推荐

