Pin*_*ts0 7 javascript arrays loops if-statement
我有以下问题:
编写一个函数,如果数组中的所有整数都是数字因子,则返回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)) //? falseRun Code Online (Sandbox Code Playgroud)
我的解决方案返回true,这是错误的。我知道是else语句弄糟了它。但是我想理解为什么else语句不能去那里。
您正在一家巧克力店工作,老板告诉您检查所有巧克力(有辣椒巧克力,焦糖巧克力和咖啡巧克力)是否都很好。他告诉您以下内容:
遍历所有巧克力,并为每种巧克力品尝,如果还可以,请告诉我一切都很好,否则请告诉我有什么问题 ¹
您从第一个巧克力开始,它是辣椒巧克力,它尝起来很美味,然后去找老板,告诉他一切都很好。您的老板对您大喊,因为您还没有品尝过焦糖巧克力和咖啡巧克力。
您意识到老板确实希望您这样做:
仔细检查巧克力,为每种巧克力品尝,如果味道不好,请立即告诉我,否则继续进行直到您品尝了所有巧克力,然后回到我身边,告诉我一切都很好。²
或在代码中:
// ¹
function checkChocolates(chocolates) {
for(const chocolate of chocolates) {
if(isTasty(chocolate)) {
return true;
} else {
return false;
}
}
}
// ²
function checkChocolates(chocolates) {
for(const chocolate of chocolates) {
if(isTasty(chocolate)) {
continue; // this could be omitted, as a loop keeps looping nevertheless
} else {
return false;
}
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
由于这是编程中非常常见的任务,因此已经存在一种较短的表达方式:
if(chocolates.every(isTasty)) {
alert("all chocolates are fine");
} else {
alert("Oh, that doesnt taste good");
}
Run Code Online (Sandbox Code Playgroud)
而isTasty函数是获取巧克力并返回true或false的函数。
如果您还不了解它,请尝试一下!买一些巧克力,品尝一下!如果有人告诉您“吃巧克力不学习”,请回答“我正在调试橡皮鸭 ”,没有人可以抱怨:)
只是将true返回for循环,
如果你一直return true在else part只要任何的值不会满足num % element !== 0你的代码return true不应该在这种情况下发生,因为你正在检查在阵列中的所有值应该是给定数量的因素
让我们以第一个例子来了解
1,它将检查条件是否为 num % element !== 0假,因此它将转到else条件和return true函数中,而不检查其余值。return true结尾,以便如果循环中的任何值不满足if条件,那么仅控制将转到return 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))Run Code Online (Sandbox Code Playgroud)
简而言之 -在这种情况下,如果您希望所有人都必须符合某个条件(作为经验法则),则可以将其视为
failing case返回值保留在for循环内passing case返回值保留在函数末尾JS 在这种情况下都有一个内置方法Array.every
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));Run Code Online (Sandbox Code Playgroud)