问题描述
我有以下问题:
编写一个函数,如果数组中的所有整数都是一个数的因数,则返回 true,否则返回 false.
我尝试了以下代码:
function checkFactors(factors, num) {
for (let i=0; i<factors.length; i++){
let element = factors[i];
console.log(element)
if (num % element !== 0){
return false
}
else {
return true
}
}
}
console.log(checkFactors([1, 2, 3, 8], 12)) //➞ false
我的解决方案返回 true,这是错误的.我知道是 else 语句把它搞砸了.但我想了解为什么 else 语句不能去那里.
My solution returns true which is wrong. I know it's the else statement that's messing it up. But I want to understand why the else statement can't go there.
推荐答案
只需要在 for 循环外返回 true,
如果您将 return true
保留在 else part
中,只要任何不满足 num % element !== 0
的值代码将 return true
在这种情况下不应该发生,因为您正在检查数组中的所有值应该是给定数字的因子
If you keep return true
in else part
as soon as any of value which does not satisfies num % element !== 0
your code will return true
which should not happen in this case as you're checking for all the values in array should be factor of given number
让我们通过第一个例子来理解
- 在数组
1
的第一个元素上,它会检查条件num % element !== 0
是否为假,所以它会转到 else 条件和从函数返回真
,不会检查其余的值. - 所以你需要在最后保留
return true
所以如果循环中的任何值不满足 if 条件,那么只有控制将转到return true
- On first element in array
1
it will check if conditionnum % element !== 0
which turns out false, so it will go to else condition andreturn true
from function and will not check for rest of values. - So you need to keep
return true
at the end so if any of the value in loop doesn't satisfy the if condition than only control will go toreturn true
function checkFactors(factors, num) {
for (let i=0; i<factors.length; i++){
let element = factors[i];
if (num % element !== 0){
return false
}
}
return true
}
console.log(checkFactors([1, 2, 3, 8], 12)) //➞ false
console.log(checkFactors([1, 2], 2))
简而言之 - 在这种情况下,您希望所有这些都必须匹配一个条件作为拇指规则,您可以将其视为
- 将
failing case
返回值保留在 for 循环中 - 保持
passing case
返回值在函数的末尾
- keep the
failing case
return value inside for loop - keep the
passing case
return value at the end of function
JS 有一个内置方法 Array.every 对于这种情况
JS have a inbuilt method Array.every for such cases
function checkFactors(factors, num) {
return factors.every(element => num % element === 0);
}
console.log(checkFactors([1, 2, 3, 8], 12));
console.log(checkFactors([1, 2], 2));
这篇关于测试是否所有数组元素都是一个数的因数 - 在 for 循环内返回的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!