退出多个循环(继续和中断之间的区别)

介绍

清理了嵌套 for 语句中 continue 和 break 之间的行为差​​异。它是用 JavaScript 编写的,但也可以用 Java 编写。

目录

1. 样品

例如,一个简单数组的多重循环

const loopA = [1, 2];
const loopB = [1, 2, 3];

for (const a of loopA) {
    for (const b of loopB) {
        console.log(`A${a}-B${b}`);
    }
}

// 出力結果↓↓
// A1-B1
// A1-B2
// A1-B3
// A2-B1
// A2-B2
// A2-B3
2.继续

continue 跳过循环的其余部分并继续下一个循环。本例中,当内循环(loopB)为2时,不输出。

const loopA = [1, 2];
const loopB = [1, 2, 3];

for (const a of loopA) {
    for (const b of loopB) {
        if (b === 2) {
            continue;
        }
        console.log(`A${a}-B${b}`);
    }
}

// 出力結果↓↓
// A1-B1
// A1-B3
// A2-B1
// A2-B3
3.休息

break 终止循环本身。如果你在上面continue的地方使用break,内循环(loopB)会在那里结束,2之后的输出不会输出,会移动到外循环的下一个循环( loopA)..

const loopA = [1, 2];
const loopB = [1, 2, 3];

for (const a of loopA) {
    for (const b of loopB) {
        if (b === 2) {
            break;
        }
        console.log(`A${a}-B${b}`);
    }
}

// 出力結果↓↓
// A1-B1
// A2-B1
4. 更深的循环

通常说,首先不应该使用多个循环,因为它们会降低可读性。这一次,为了确认 continue 和 break 的区别,我敢于潜得更深。

const loopA = [1, 2];
const loopB = [1, 2];
const loopC = [1, 2, 3];

for (const a of loopA) {
    for (const b of loopB) {
        for (const c of loopC) {
            console.log(`A${a}-B${b}-C${c}`);
        }
    }
}

// 出力結果↓↓
// A1-B1-C1
// A1-B1-C2
// A1-B1-C3
// A1-B2-C1
// A1-B2-C2
// A1-B2-C3
// A2-B1-C1
// A2-B1-C2
// A2-B1-C3
// A2-B2-C1
// A2-B2-C2
// A2-B2-C3

我们将以此作为样本来检查行为差异。

5. 继续标签

您可以随时使用标签退出循环。这次是LABEL,但您可以为标签指定任何字符串。

const loopA = [1, 2];
const loopB = [1, 2];
const loopC = [1, 2, 3];

LABEL:for (const a of loopA) {
    for (const b of loopB) {
        for (const c of loopC) {
            console.log(`A${a}-B${b}-C${c}`);
            if (b === 2 && c === 1) {
                continue LABEL;
            }
        }
    }
}

// 出力結果↓↓
// A1-B1-C1
// A1-B1-C2
// A1-B1-C3
// A1-B2-C1
// A2-B1-C1
// A2-B1-C2
// A2-B1-C3
// A2-B2-C1

在这个例子中,第二个循环(loopB)是2,第三个循环(loopC)是1,跳过第一个循环的其余部分(loopA)。继续下一个循环.

6.打破标签

接下来,让我们在与上述 continue 相同的位置和相同的条件下使用 break。

const loopA = [1, 2];
const loopB = [1, 2];
const loopC = [1, 2, 3];

LABEL:for (const a of loopA) {
    for (const b of loopB) {
        for (const c of loopC) {
            console.log(`A${a}-B${b}-C${c}`);
            if (b === 2 && c === 1) {
                break LABEL;
            }
        }
    }
}

// 出力結果↓↓
// A1-B1-C1
// A1-B1-C2
// A1-B1-C3
// A1-B2-C1

通过满足条件,标记loopA被破坏,不执行后续处理。

七、总结

即使是这样一个简单的例子,可读性也会下降,所以我认为让循环本身保持浅层很重要。但是,我认为了解如何使用标签将扩大如何处理循环的范围。

原创声明:本文系作者授权爱码网发表,未经许可,不得转载;

原文地址:https://www.likecs.com/show-308622949.html

57人参与, 0条评论 登录后显示评论回复

你需要登录后才能评论 登录/ 注册