"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como sair prematuramente de um loop forEach em Node.js?

Como sair prematuramente de um loop forEach em Node.js?

Publicado em 2024-11-08
Navegar:378

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

Como interromper um Node.js forEach Loop

Em situações em que você precisa percorrer estruturas de dados aninhadas recursivamente e executar uma operação para cada elemento, você pode usar um combinação de recursão e forEach. No entanto, pode haver casos em que você precise sair prematuramente do loop forEach.

Ao contrário de um loop regular com instruções break ou continue, forEach não possui um mecanismo integrado para interromper sua iteração. Para simular esse comportamento, vamos explorar três abordagens:

1. A maneira "feia": usando um booleano contextual

Passe um segundo argumento para forEach como o contexto e armazene um valor booleano nele. Dentro da função de retorno de chamada, verifique o booleano e interrompa se necessário. Essa abordagem é visualmente desagradável.

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

2. A maneira "controversa": tratamento de exceções

Coloque o loop forEach dentro de um bloco try-catch. Quando você quiser interromper, lance uma exceção e capture-a fora do loop. Essa abordagem pode afetar o desempenho e levantar preocupações sobre a legibilidade do código.

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

3. A maneira "divertida": usar every()

every() é uma opção melhor. Ele continua iterando pela coleção até que a função de retorno de chamada retorne falso. Isso efetivamente atua como uma instrução de interrupção.

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

Você também pode usar some() em vez de every() se preferir retornar true para break.

Declaração de lançamento Este artigo foi reimpresso em: 1729171158 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3