«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как преждевременно выйти из цикла forEach в Node.js?

Как преждевременно выйти из цикла forEach в Node.js?

Опубликовано 8 ноября 2024 г.
Просматривать:742

How to Prematurely Exit a forEach Loop in Node.js?

Как прервать цикл forEach в Node.js

В ситуациях, когда вам нужно рекурсивно проходить вложенные структуры данных и выполнять операцию для каждого элемента, вы можете использовать комбинация рекурсии и forEach. Однако могут быть случаи, когда вам потребуется преждевременно выйти из цикла forEach.

В отличие от обычного цикла с операторами прерывания или продолжения, в forEach отсутствует встроенный механизм остановки его итерации. Чтобы смоделировать такое поведение, давайте рассмотрим три подхода:

1. «Уродливый» способ: использование контекстного логического значения

Передайте второй аргумент в forEach в качестве контекста и сохраните в нем логическое значение. Внутри функции обратного вызова проверьте логическое значение и при необходимости вырвите его. Этот подход визуально непривлекательный.

function recurs(comment) {
    var stop = false;
    comment.comments.forEach(function (elem) {
        recurs(elem);
        if (...) stop = true;
    }, stop);
}

2. «Спорный» способ: обработка исключений

Заключите цикл forEach в блок try-catch. Если вы хотите прервать выполнение, создайте исключение и перехватите его вне цикла. Такой подход может повлиять на производительность и вызвать проблемы с читабельностью кода.

try {
    comment.comments.forEach(function (elem) {
        recurs(elem);
        if (...) throw new Error("Stop Iteration");
    });
} catch (e) {
    if (e.message === "Stop Iteration") return;
}

3. «Забавный» способ: использование Every()

every() — лучший вариант. Он продолжает перебирать коллекцию до тех пор, пока функция обратного вызова не вернет false. Фактически это действует как оператор прерывания.

comment.comments.every(function (elem) {
    recurs(elem);
    if (...) return false;
    return true;
});

Вы также можете использовать some() вместо Every(), если предпочитаете возвращать true для прерывания.

Заявление о выпуске Эта статья воспроизведена: 1729171158. Если есть какие -либо нарушения, пожалуйста, свяжитесь с учебным заведением[email protected], чтобы удалить его.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3