2017-10-20 10 views
0

配列の3つの連続する数字の合計が7になる場合にtrueを返す必要があるLucky Sevensの問題を解決しようとしています。もっと良い方法があるとわかっていますが、ここで.spliceを使いたいと思います。何らかの理由でループが途中で停止し、最後の6桁をチェックしません。ループが途中で停止するのはなぜですか?

function seven(arr) { 
    for(var i=0; i<arr.length; i++) { 
     if((arr[0] + arr[1] + arr[2]) == 7) { 
      document.body.innerHTML = “true”; 
     } 
     arr.splice(0,1); 
     document.body.innerHTML = “false”; 
}} 
seven([1,5,7,1,5,2,1,5,3,1,5,1]); 
+4

あなたは 'i'を増やしていて、' arr.length'を減らしています( 'splice'経由で)。 – melpomene

答えて

0

あなたはarr.splice(0,1); で、ループ内のARR要素を削除してループブレーク条件i<arr.lengthでいます。長さはすべての反復で計算されます。したがって、スプライスを使用すると配列が変更され、arr.lengthで配列の長さが変更されます。スプライスせず

スプライス

function seven(arr) { 
var len = arr.length 
    for(var i=0; i<len; i++) { 
     if((arr[0] + arr[1] + arr[2]) == 7) { 
      document.body.innerHTML = “true”; 
     } 
     arr.splice(0,1); 
     document.body.innerHTML = “false”; 
}} 
seven([1,5,7,1,5,2,1,5,3,1,5,1]); 

有する溶液

function seven(arr) { 
    var len = arr.length -2 
     for(var i=0; i<len; i++) { 
      if((arr[i] + arr[i+1] + arr[i+2]) == 7) { 
       document.body.innerHTML = “true”; 
      } 
      document.body.innerHTML = “false”; 
    }} 
    seven([1,5,7,1,5,2,1,5,3,1,5,1]); 
1

whileループを使用します。

function seven(arr) { 
    while(arr.length > 2) { 
     if((arr[0] + arr[1] + arr[2]) == 7) { 
      document.body.innerHTML = "true"; 
     } 
     arr.splice(0,1); 
     document.body.innerHTML = "false"; 
    } 
} 
seven([1,5,7,1,5,2,1,5,3,1,5,1]); 

2つの要素がある場合、ループは中断しますが、配列内に2つ以上の要素が存在する間実行されます。

1

その値は、「i」は第5回反復した後、「ARR」配列の長さと等しくなるの、あなたのループ内の条件

i < arr.length 

は、forループの実行を停止するため。

関連する問題