在需要递归遍历嵌套数据结构并对每个元素执行操作的情况下,您可以使用递归和forEach 的组合。但是,在某些情况下,您可能需要提前退出 forEach 循环。
与带有 break 或 continue 语句的常规循环不同,forEach 缺乏内置机制来停止其迭代。为了模拟这种行为,让我们探索三种方法:
1。 “丑陋”的方式:使用上下文布尔值
将第二个参数传递给 forEach 作为上下文,并在其中存储一个布尔值。在回调函数内,检查布尔值并在必要时进行中断。这种方法在视觉上没有吸引力。
<code class="javascript">function recurs(comment) { var stop = false; comment.comments.forEach(function (elem) { recurs(elem); if (...) stop = true; }, stop); }</code>
2. “有争议的”方式:异常处理
将 forEach 循环包含在 try-catch 块中。当你想中断时,抛出一个异常并在循环外捕获它。这种方法会影响性能,并可能引起对代码可读性的担忧。
<code class="javascript">try { comment.comments.forEach(function (elem) { recurs(elem); if (...) throw new Error("Stop Iteration"); }); } catch (e) { if (e.message === "Stop Iteration") return; }</code>
3. “有趣”的方式:使用 every()
every() 是一个更好的选择。它继续迭代集合,直到回调函数返回 false。这实际上充当了一个break语句。
<code class="javascript">comment.comments.every(function (elem) { recurs(elem); if (...) return false; return true; });</code>
如果您希望返回true来中断,您也可以使用some()而不是every()。
以上是如何在 Node.js 中提前退出 forEach 循环?的详细内容。更多信息请关注PHP中文网其他相关文章!