如何在JavaScript中将IF语句重构为三元运算符?代码问题求助
问题分析与修复方案
你的重构代码存在多处语法和逻辑错误,导致完全无法正常工作,具体问题如下:
- 三元表达式使用错误:三元运算符
? :的两个分支必须是可求值的表达式,但你在else分支里直接放了for循环语句,还套了{}(这会被解析成无效的对象字面量),完全不符合语法规则。 - 判断条件写错:循环里的
num % 1 === 0永远为true(任何数模1都是0),应该是num % i === 0,用来检查当前数是否能被i整除。 - 缺少返回逻辑:即使循环中发现了能整除num的因数,你的代码也没有返回false,最后所有情况都会走到
return true,导致结果完全错误。 - 三元表达式的结果未返回:
num <= 1 ? false : ...这行只是计算了一个值,但没有用return输出,所以num<=1时也不会返回false。
修复后的简洁版代码
保持原逻辑不变,同时让代码更简洁:
function isPrime(num) { if (num <= 1) return false; for (let i = 2; i < num; i++) { if (num % i === 0) return false; } return true; }
进阶简洁写法(用数组方法)
如果想更简洁,也可以用Array.some方法实现,逻辑和原代码一致:
function isPrime(num) { // 大于1,且不存在2到num-1之间的因数 return num > 1 && !Array.from({ length: num - 2 }, (_, i) => i + 2).some(i => num % i === 0); }
内容的提问来源于stack exchange,提问作者ubermo
相关产品推荐
相关产品推荐

