web-dev-qa-db-ja.com

すべての配列要素が数値の要素であるかどうかをテスト-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ステートメントがなぜそこに行けないのかを理解したいと思います。

7
PineNuts0

コードのロジックが間違っています。配列のすべての要素をチェックし、すべての要素が条件を満たす場合はtrueを返しますが、要素の1つが条件を満たさない場合はすぐにfalseを返します。 elseは、1つの項目が条件を満たすが、すべての要素ではないことを意味します。それが問題です。

0
W.Bright

はい、問題の原因となっている「その他」。私はそれを削除し、forループの外側に「return true」を追加しました。

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 
    }
  }
  return true;
}
0
javapedia.net