如何修改代码过滤非数字、负数及超出最大值的无效猜测?
解决方案
你需要扩展filter的判断逻辑,同时过滤非数字、NaN、负数/0、超过最大值这几类无效值,具体修改如下:
假设存储的是数字类型的猜测值
如果guessAmount数组里的元素已经是数字类型,直接用以下过滤逻辑:
if(guess == num) { // 替换成你实际存储最大值的变量名,比如用户设定的maxGuessValue const maxGuessValue = 55; // 过滤出所有有效猜测 const validGuesses = guessAmount.filter(val => typeof val === 'number' && // 确保是数字类型 !isNaN(val) && // 排除NaN Number.isInteger(val) && // 确保是整数(允许小数可删除此行) val > 0 && // 排除0及负数 val <= maxGuessValue // 排除超过最大值的数值 ); message.innerHTML = `BOOM! You got it! It took you ${guessAmount.length} tries to get it and the numbers you guessed were ${validGuesses}`; }
若存储的是字符串类型的输入值
如果guessAmount里存的是从输入框获取的字符串(比如"65"),需要先转换为数字再过滤:
if(guess == num) { const maxGuessValue = 55; const validGuesses = guessAmount .map(str => Number(str)) // 把字符串转成数字 .filter(val => !isNaN(val) && Number.isInteger(val) && val > 0 && val <= maxGuessValue ); message.innerHTML = `BOOM! You got it! It took you ${guessAmount.length} tries to get it and the numbers you guessed were ${validGuesses}`; }
关键判断说明
typeof val === 'number' && !isNaN(val):彻底排除非数字、无法转换为有效数字的内容Number.isInteger(val):仅保留整数(如果你的游戏支持小数猜测,直接删掉这一行即可)val <= maxGuessValue:严格限制猜测值不超过用户设定的最大值
内容的提问来源于stack exchange,提问作者Bbrook
相关产品推荐
相关产品推荐

