为什么我的if和else语句同时打印?

时间:2016-03-07 22:39:03

标签: javascript

为什么要打印else和if语句?检查数组是否匹配 他们所做的第5行的元素......所以我的if语句应该打印出来。 然而,我的警报条件打印出if条件。我已经尝试重新排列代码,但仍然没有运气。

var array1 = [1, 89, 3, 4, 5];

var array2 = [1, 2, 7, 10, 89];

for (var i = 0; i < 6; i++) {
    for (var j = 0; j < 6; j++) {
        if (array1[i] == array2[j]) {
            document.getElementById("demo").innerHTML =
                "Hello World" //Should just print this since elements match
            break;
        } else {
            alert("Error");
            break;
        }
    }
}

4 个答案:

答案 0 :(得分:1)

如果要在内循环中找到匹配项时停止外循环,则需要为break添加标签参数。

outer:
for (var i = 0; i < 6; i++) {
    for (var j = 0; j < 6; j++) {
        if (array1[i] == array2[j]) {
            document.getElementById("demo").innerHTML =
                "Hello World" //Should just print this since elements match
            break outer;
        } else {
            alert("Error");
            break;
        }
    }
}

Hello World显示之前,您仍可能收到一些提醒。您的代码会警告每个不匹配的元素对,直到找到匹配项。因此,除非匹配元素在两个数组中都是第一个,否则在显示Hello world之前,您将收到一堆警报。

此外,由于breakif块中都有else,因此您永远不会超过j循环的第一次迭代。

如果您只想要一个警告,表明找不到匹配的元素,则需要将其移出循环。

var match_found = false;
outer:
for (var i = 0; i < 6; i++) {
    for (var j = 0; j < 6; j++) {
        if (array1[i] == array2[j]) {
            document.getElementById("demo").innerHTML =
                "Hello World" //Should just print this since elements match
            match_found = true;
            break outer;
        }
    }
}
if (!match_found) {
    alert("Error");
}

答案 1 :(得分:0)

for循环会很快重复,这就是为什么你不能看到他们在不同的时间做这件事; 你的代码不会同时输出,只是为了快速。

如果您正在考虑延迟,请查看setInterval

答案 2 :(得分:0)

跳过其他部分。你真的不需要那样做。除非您希望在条件不正确的情况下执行其他操作,否则请省略else语句。

答案 3 :(得分:0)

当你致电break时,它只会终止内循环。外部循环将继续迭代,将再次检查您的条件,然后运行else语句。

另一种方法是:

(function() {
    for (var i = 0; i < 6; i++) {
        for (var j = 0; j < 6; j++) {
            if (array1[i] == array2[j]) {
                document.getElementById("demo").innerHTML =
            "Hello World" //Should just print this since elements match
                return;
            } else {
                alert("Error");
                return;
            }
        }
    }
})();

将代码包装在自执行功能中,您可以将break替换为return以退出整个功能。