首页 > 解决方案 > 测试所有数组元素是否都是数字的因数 - 在 for 循环内返回

问题描述

我有以下问题:

编写一个函数,如果数组中的所有整数都是数字的因数,则返回 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 语句不能去那里。

标签: javascriptarraysloopsif-statement

解决方案


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

浏览所有巧克力,为每一种巧克力品尝,如果没问题,告诉我一切都很好,否则告诉我有问题¹

你从第一块巧克力开始,那是辣椒巧克力,味道鲜美,你去找你的老板,告诉他一切都好。你的老板对你大吼大叫,因为你还没有尝过焦糖巧克力咖啡巧克力

你意识到你的老板实际上希望你这样做:

浏览巧克力,每一种巧克力,尝一尝,如果味道不好,立即告诉我,否则继续,直到你都尝过,然后回到我身边,告诉我一切都很好。²

或在代码中:

 // ¹
  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;
 }

由于这是编程中非常常见的任务,因此已经有一种更短的方式来表达这一点:

 if(chocolates.every(isTasty)) {
   alert("all chocolates are fine");
 } else {
    alert("Oh, that doesnt taste good");
 }

whileisTasty是一个接受巧克力并返回 true 或 false 的函数。


如果你还没有掌握它,那就试试吧!买点巧克力,尝尝!如果有人告诉您“吃巧克力不是在学习”,请回复“我在做橡皮鸭调试”,没有人可以抱怨 :)


推荐阅读