2017-10-20 39 views
0

我想解决幸运七球杆问题,你需要返回true,如果在一个数组中的任何3个连续的数字总和为7.我知道有一个更好的方法来做到这一点,但我想在这里使用.splice。出于某种原因,循环停在中间,不检查最后六位数字。为什么循环在中间停下来?

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); 并在回路断线状态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”变成等于在循环第五迭代后“ARR”阵列,条件

i < arr.length 

的长度停止的for循环的执行。