javascript - 打破数组循环函数(map、forEach 等)的循环

标签 javascript control-structure

如何从数组上的隐式循环中中断(类似于 break 语句)?

Array.prototype.map、Array.prototype.forEach 等函数意味着对数组元素的循环。我想有条件地尽早打破这个循环。

这个人为的例子:

const colours = ["red", "orange", "yellow", "green", "blue", "violet"];

colours.map(item => {
    if (item.startsWith("y")) {
        console.log("The yessiest colour!");
        break;
    }
});

导致语法错误:未标记的中断必须位于循环或开关内

如何像 break 语句那样中断循环?

最佳答案

您无法使用常规方式来完成此操作。您可以通过记住循环是否“中断”来模拟 break 行为。该解决方案的不足之处在于循环实际上仍在继续(尽管跳过了迭代逻辑)。

let isBroken = false;

colours.map(item => {
    if (isBroken) {
        return;
    }
    if (item.startsWith("y")) {
        console.log("The yessiest colour!");
        isBroken = true;
        return;
    }
});

您的示例的最佳解决方案是使用简单的 for 循环。

for (colour of colours) {
    if (colour.startsWith("y")) {
        console.log("The yessiest colour!");
        break;
    }
}

您还可以使用一种肮脏的方式来实际停止 map 循环。

colours.map((item, index, array) => {
    if (item.startsWith("y")) {
        console.log("The yessiest colour!");
        array.splice(0, index);
    }
});
// The colours array will be modified after this loop

关于javascript - 打破数组循环函数(map、forEach 等)的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50558227/

相关文章:

python - python是否有更好的控制结构或其他功能来简化代码?

javascript - 使用 lodash 从对象属性和值的集合创建两个数组

javascript - 页面加载后显示 block 几秒钟

java - 使用循环和控制结构显示所有提出的奇数和偶数的总和

c++ - 在控制结构中定义变量

c - 我如何仅使用 if 语句重写此选择结构?

java - 在 Java 中将数字转换为单词。有没有更简单、更有效的方法呢?

javascript - JavaScript 的编译器是否因网络浏览器而异

javascript - JS 通过嵌套的 json 创建自定义 json

javascript - 在 jQuery Accordion 标题选择后交换图像