我正在使用Node.js和Mongoose -试图在深层注释嵌套中找到特定的注释,其中带有递归函数和forEach。有没有办法停止Node.js forEach?正如我所理解的,forEach迭代都是一个函数,我不能只做break,只做return,但这不会停止forEach。
function recurs(comment) {
comment.comments.forEach(function(elem) {
recurs(elem);
//if(...) break;
});
}
你不可能从forEach中脱身。不过我能想到三种伪装方法。
1. 丑陋的方法:传递第二个参数给forEach作为上下文,并在那里存储一个布尔值,然后使用if。这看起来很糟糕。
2. 有争议的方式:将整个事情包围在一个try-catch块中,并在想要中断时抛出异常。这看起来很糟糕,可能会影响性能,但可以封装。
3.有趣的方法:使用every()。
['a', 'b', 'c'].every(function(element, index) {
// Do your thing, then:
if (you_want_to_break) return false
else return true
})
如果希望返回true以break,则可以使用some()。
无法从Array#forEach中退出。(您可以在链接页面上查看在Firefox中实现它的源代码,以确认这一点。)
相反,你应该使用一个正常的for循环:
function recurs(comment) {
for (var i = 0; i < comment.comments.length; ++i) {
var subComment = comment.comments[i];
recurs(subComment);
if (...) {
break;
}
}
}
(或者,如果你想更聪明一点,comment.comments[i]总是一个对象:)
function recurs(comment) {
for (var i = 0, subComment; subComment = comment.comments[i]; ++i) {
recurs(subComment);
if (...) {
break;
}
}
}