2017-03-11 4 views
-1

私はこの練習問題を既に持っていますが、説明を聞いた後もまだ分かりません。Javascript:Loopの場合、if/elseを使ってこの練習を理解するのに助けが必要です

「が(機能isUniformを書き込む)配列内のすべての要素が同一である場合引数と 戻るように真の配列を受け取り」

これは溶液

である:これは運動であります
function isUniform(numArr) { 
    var first = numArr[0]; 
    for (var i = 1; i < numArr.length; i++) { 
    if (numArr[i] !== first) { 
     return false; 
    } 
    } 
    return true; 
} 

私はほとんど正しいですが、私は "return true"というelse文を実行しても動作しませんでした。 forループの外側で "true true"を返すのはなぜですか? (編集済み)これは私が初めてやった方法です:

function isUniform(numArr) { 
    var first = numArr[0]; 
    for (var i = 1; i < numArr.length; i++) { 
    if (numArr[i] !== first) { 
     return false; 
    } 
    else { 
     return true; 
    } 
    } 
} 
+0

他のソリューションもコピーしてください。ちょうど比較する...しかしそれでも配列の残りの部分と常に最初の項目を比較しています... –

答えて

1

を起動されません場合は基本的にあなたの関数を使用すると、ループの外にtrueを返した場合は1が最後にそれを取得ifテストまたはと一致するまで、それはループ内のすべての要素をチェックtrueを返しますループの

ループ内でtrueを返すと、最初の要素に対して常にreturnステートメントがヒットし、ループが停止します。

+0

これは意味があります。私はループの仕組みを誤解していました。私はそれが真か偽かを評価するためにループ全体をチェックすると思った。しかし、何が起こるのかは、彼がそのステートメントの1つを満たすとすぐに停止するということです。たとえば、[1、1、1、3]がある場合、2番目の要素が等しいので真です。 – fields

+0

私はwhileループをやりましたか? while(numArr [i] === first){trueを返します。 i ++} console.log( "false");これは効果がありますか? – fields

+1

@fieldsこれは意味をなさない。 'continue'と' break'を使って 'for'、' while'、 'do..while'ループ内で反復を中断または制御できますが、' return'ingは常にその関数を終了します。上の解は、一致しない値が見つかった場合に直ちに失敗するか、 'for'ループが単独で終了した場合に一致しない値が見つからなかったと仮定しているため、うまく動作します。 –

0

あなたの関数の最後の文があるので、それは動作します。ループの内側の条件が

1

私はそれがほとんど右ましたが、私は「真の を返す」とelseステートメントを行なったし、それが

を動作しませんでしたので、全て以下のソリューションは、いくつかのケースで誤った結果を返しますfirstと等しい配列内の最初の要素を見つけて、配列全体を検索していなくてもtrueを返します。

function isUniform(numArr) { 
     var first = numArr[0]; 
     for (var i = 1; i < numArr.length; i++) { 
     if (numArr[i] !== first) { 
      return false; 
     } 
     else { 
      return true; 
     } 
     } 
    } 

私はすでに答えを得たこの練習を持っているが、 説明を聞いた後、まだ理解していません。

のは、これはあなたの配列であると仮定してみましょう:

[10,10,13,10,10] 

だが、これは変数firstであると仮定してみましょう:基本的にfor loop内にある

first = 10; 

if statementそれ以下の変数first (10)がある場合に言います現在のインデックスの要素と等しくないi(配列内のnthの数値)then return false。このとき、変数firstが指定されたindexの要素と同じでない場合、たとえばindex 2 (number 13)の場合は、続行する必要がないため、これは理にかなっています。したがって、returnはfalseになります。

if (numArr[i] !== first) { 
    return false; 
} 

今のが配列であると仮定してみましょう:

[10,10,10,10,10] 

だが、これは変数firstであると仮定してみましょう:

first = 10; 

今変数firstは、アレイ内の各elementと比較されますと、それは "現在の要素と等しくない10"と言います。この場合は10 is equal to 10なのでfalseです。これは配列を伝搬し、コントロールはifブロックの中を決して通過しません。最終的に、制御は真のステートメントreturnに渡されます。

if (numArr[i] !== first) { 
    return false; 
} 
0

たとえば、しばらくして印刷物を壊した壊れたプリンタがあるとします。今では20部を印刷し、すべての用紙が問題ないかどうかを知りたいと思っています。だから、今度は、一致していないものを見つけるまで、繰り返しコピーを比較しなければならないでしょう。または、穴のスタックを通ってすべてのコピーが正常であることを知っています(何もない時間を無駄にしました)。