2017-01-20 5 views
0

私はこのコードが何をしているのかを知っています。コードが "均一"であるかどうかを確認するために、a,a,a,a,a,aまたは1,1,1,1,1,1があります。しかし、私はこの方程式がどのように働いているか正確にはわかりません。私はたいていarray[0]と、なぜ変数がi = 1であるのか混乱しています。誰かがここで何が起きているのか、なぜこれがうまくいくのかを正確に突き止めてくれますか?誰かがこの機能がlaymansの言葉でどのように機能するのか説明できますか?

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

あなたはそれがどのように動作すると思いますか投稿すると大いに役立ちます。私たちはあなたのスキルレベルが何かを推測することができます。 – 4castle

+0

だから私は最初の変数配列がゼロであることを読んでいます。forステートメントのvarはi = 1で、配列の長さよりも小さいものはそれに1を加えます。その配列が0に等しくない場合はfalseを返します。だから、私は混乱しています。それを真実に戻すためには、それ自体が平等であるべきではないでしょうか? –

+0

これを書き込む別の方法は次のとおりです: 'var first = arr [0]; return arr.every(val => val === first); ' – 4castle

答えて

1

JavaScriptの配列は0から始まります。したがって、行

var first = arr[0] 

は、配列に渡されたarr引数の最初の要素を表します。それは決して変化しません。

for(var i = 1; i < arr.length; i++) 

反復全体にわたってループが、最終要素に対する第2の要素(arr[1])から始まる第1の素子アレイ。途中で文if(arr[i] !== first)は、各配列要素(最初の配列要素を除く)と、firstに格納されている最初の配列要素を単純に比較します。いずれかが一致しない場合はfalseを返し、そうでない場合はtrueを返します。入力配列が[1,2,3,4,5]の場合、arr[0]=1, arr[1]=2, arr[2]=3...と最初の配列要素(および変数)の値は1となり、ループは残りの配列値(2, 3, 4, and 5)を反復処理します。したがって、1が2に等しくないため、最初の反復でfalseを返します。

この関数については、配列の値を比較して要素を比較するだけのので、この関数については驚くべきことも例外もありません。

+0

だから私はちょっとフォローしていると思いますが、そうではないかもしれません。 私の配列は[3,3,3,3,3,2] であると言うことができます。セクションarr [0]は実際には数字3を格納していますか? したがって、混乱する部分はループ部分になります。 3を1に変更し、1が配列の長さ1 + 1よりも小さいことを確認していますか? –

+0

'arr [0]'が3であることは間違いありません。 '0'は配列の最初の要素を指します。ループは配列から独立しています。 1から配列の最後まで数えています。あなたの例をコメントに使用すると、1,2,3,4と5がカウントされます。したがって、ループが最初に実行されるとき、配列の2番目の値である 'arr [1]'と比較されます(配列のインデックスはまた、アレイの終わりまでオンとオンになります。ループの 'i'変数はカウンタとして機能するだけです。配列の各要素を確認できるように1から5に増分します。 – j08691

+0

コメント内にあなたの例を使っても、 'arr [1]、arr [2]、arr [3]、arr [4]'はすべて '3'と同じ値を含んでいます。 '2'を含む最後の配列要素' arr [5] 'です。ループは 'i'を使って配列要素を選択します。 「i」は1から5になります。 – j08691

0

JavaScriptの長さは0ではありません。だから、次の配列をベース一方4.

[1,2,3,4] 

配列の長さ0を持っている[3]内部4.数に等しいことになるので、あなたは、ARRだろう、この配列の4番目の要素を取得します角カッコは値ではなく配列内の位置を表します。

2

はそれが

function isUniform(arr){ 
    var first = arr[0]; //storing the first value in the array in variable 'first' 
    //arr.length gives the number of elements in the array 
    //looping between numbers 1 and the end of the length of array (array.length) 
    for(var i = 1; i < arr.length; i++){ 
     if(arr[i] !== first){ //checking if current value (arr[i]) is equal to first value 
      return false;//if it is not equal returning false and return ends the loop and function 
     } 
      //if all the values are equal the above if condition never runs 
    } 
    //if above if condition never runs, this statement runs and returns true 
    return true; 
} 
+0

これは役に立っています、私はfor文がまだ混乱していると思います。私は数学の方程式のようにそれを読んでいる。チェックポイントを毎回正しい方向に動かすように考える必要がありますか?したがって、0は既にチェックされているので、1で始まり、arr [0]番号と照合し、同じ番号が次の番号に移動するかどうかチェックします。 –

+0

'for'文は単なる略記に過ぎません。 'for(A; B; C){body}'はほとんど同じです: 'A;一方、(B){身体; C} ' –

+1

' i = 1'を見て、それが数学だと考えるのはよくある間違いです。これが言っていることは、 'i'という名前の"ボックス "(変数)に値1を入れていることです。他のいくつかの言語では、代入演算子は '='ではなく、 'i < - 1'や' '$' 'のように矢印のように見えるものもあります。私は:= 1'とはっきりしているようです。 –

0

初の役に立てば幸い//を使用してコード内のコメントを与えている、我々は変数firstに配列の最初の要素を格納します。配列の要素の残りの部分をループし始めます(そのため、要素とそれ自身を比較する必要がないため、i1で始まります)。現在の要素arr[i]が最初の要素と異なる場合(配列が一様ではないことを意味します)、関数はfalseを返します(関数がそれを終了すると直ちに終了し、配列の他の要素と比較することはありません)。配列のすべての要素をループしてループから出てきた場合、異なる値が見つからなかったので、配列は一様ですので、trueを返して関数を終了します。

関連する問題