测试是否所有数组元素都是数字因子-在for循环内返回

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)) //? false
Run Code Online (Sandbox Code Playgroud)

我的解决方案返回true,这是错误的。我知道是else语句弄糟了它。但是我想理解为什么else语句不能去那里。

Jon*_*lms 7

您正在一家巧克力店工作,老板告诉您检查所有巧克力(有辣椒巧克力焦糖巧克力咖啡巧克力)是否都很好。他告诉您以下内容:

遍历所有巧克力,并为每种巧克力品尝,如果还可以,请告诉我一切都很好,否则请告诉我有什么问题 ¹

您从第一个巧克力开始,它是辣椒巧克力,它尝起来很美味,然后去找老板,告诉他一切都很好。您的老板对您大喊,因为您还没有品尝过焦糖巧克力咖啡巧克力

您意识到老板确实希望您这样做:

仔细检查巧克力,为每种巧克力品尝,如果味道不好,请立即告诉我,否则继续进行直到您品尝了所有巧克力,然后回到我身边,告诉我一切都很好。²

或在代码中:

 // ¹
  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的函数。


如果您还不了解它,请尝试一下!买一些巧克力,品尝一下!如果有人告诉您“吃巧克力不学习”,请回答“我正在调试橡皮鸭 ”,没有人可以抱怨:)


Cod*_*iac 5

只是将true返回for循环,

如果你一直return trueelse 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)

简而言之 -在这种情况下,如果您希望所有人都必须符合某个条件(作为经验法则),则可以将其视为

  1. failing case返回值保留在for循环内
  2. 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)