"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo salir prematuramente de un bucle forEach en Node.js?

¿Cómo salir prematuramente de un bucle forEach en Node.js?

Publicado el 2024-11-08
Navegar:792

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

Cómo interrumpir un Node.js para cada bucle

En situaciones en las que necesita atravesar estructuras de datos anidadas de forma recursiva y ejecutar una operación para cada elemento, puede utilizar un combinación de recursividad y forEach. Sin embargo, puede haber casos en los que necesites salir prematuramente del bucle forEach.

A diferencia de un bucle normal con instrucciones break o continue, forEach carece de un mecanismo integrado para detener su iteración. Para simular este comportamiento, exploremos tres enfoques:

1. La forma "fea": usar un booleano contextual

Pase un segundo argumento a forEach como contexto y almacene un valor booleano en él. Dentro de la función de devolución de llamada, verifique el valor booleano y divídalo si es necesario. Este enfoque es visualmente poco atractivo.

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

2. La forma "controvertida": manejo de excepciones

Encierre el bucle forEach dentro de un bloque try-catch. Cuando quieras romper, lanza una excepción y atrápala fuera del bucle. Este enfoque puede afectar el rendimiento y generar dudas sobre la legibilidad del 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. La forma "divertida": usar each()

every() es una mejor opción. Continúa iterando a través de la colección hasta que la función de devolución de llamada devuelve falso. Esto actúa efectivamente como una declaración de interrupción.

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

También puedes usar some() en lugar de each() si prefieres devolver verdadero para romper.

Declaración de liberación Este artículo se reimprime en: 1729171158 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3