【问题标题】:Or Boolean Expression within the If Statement within a loop或循环内 If 语句中的布尔表达式
【发布时间】:2026-02-16 11:40:02
【问题描述】:
当我通过 Or Boolean 语句检查数字是否为素数时,它没有完成检查,而是返回整个数组。
function sumPrimes(num) {
var arr = [];
var prime;
for(var i = 1; i <=num; i++){
if(i%2 !== 0 || i%3 !== 0 || i%5 !== 0){
arr.push(i);
}
}
return arr;
}
sumPrimes(10);
【问题讨论】:
标签:
javascript
arrays
if-statement
boolean
boolean-logic
【解决方案1】:
我建议您像这样获得"get prime numbers algorithm":
function getPrimes(max) {
var sieve = [], i, j, primes = [];
for (i = 2; i <= max; ++i) {
if (!sieve[i]) {
// i has not been marked -- it is prime
primes.push(i);
for (j = i << 1; j <= max; j += i) {
sieve[j] = true;
}
}
}
return primes;
}
然后用 reduce 来总结
var sumPrimes = function(num) {
var primes = getPrimes(num)
var sum = primes.reduce(function(sum, prime) {
return sum + prime
}, 0)
}
【解决方案2】:
你想要的逻辑是要么
if (i%2 !== 0 && i%3 !== 0 && i%5 !== 0) // not divisible by 2 and not divisible by 3
// and not divisible by 5
或
if (!(i%2 === 0 || i%3 === 0 || i%5 === 0)) // not divisible by 2 or 3 or 5
当然,您需要考虑这仅适用于最高 48 的素数。