为什么循环在中间停止?

时间:2017-10-20 07:34:08

标签: javascript

我正在尝试解决Lucky Sevens问题,如果数组中的任何3个连续数字总和为7,则需要返回true。我知道有更好的方法可以做到,但我想使用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]); 这里。由于某种原因,循环在中间停止,不检查最后六位数。

facet_grid

3 个答案:

答案 0 :(得分: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 :(得分:1)

因为“i”的值在第5次迭代后变得等于“arr”数组的长度,条件

class ViewController: UIViewController, GiveAwayDelegate {

    func changeGiveaway(notification: Notification){

         print("Change giveway was called")

         ...

     }
}
循环中的

停止执行for循环。

答案 2 :(得分:0)

您正在arr.splice(0,1);中删除循环中的arr元素 并在循环中断条件i<arr.length;在每次迭代时计算长度。所以当你使用splice时,数组会发生变化,而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]);