当前位置: 首页 > 知识库问答 >
问题:

光标中的“继续”。forEach()

温翔宇
2023-03-14

我正在使用meteor构建一个应用程序。js、MongoDB和我有一个关于游标的问题。forEach()。我想在每个forEach迭代开始时检查一些条件,如果不需要对元素执行操作,则跳过该元素,这样可以节省一些时间。

这是我的代码:

// Fetch all objects in SomeElements collection
var elementsCollection = SomeElements.find();
elementsCollection.forEach(function(element){
  if (element.shouldBeProcessed == false){
    // Here I would like to continue to the next element if this one 
    // doesn't have to be processed
  }else{
    // This part should be avoided if not neccessary
    doSomeLengthyOperation();
  }
});

我知道我可以使用cursor.find()将游标转向数组。获取(),然后使用常规的for循环来迭代元素,并使用继续和正常中断,但我感兴趣的是,如果有类似的东西可以在foreach()中使用。

共有3个答案

魏松
2023-03-14

这里有一个解决方案,它使用了of的继续而不是forEach的来实现:


let elementsCollection = SomeElements.find();

for (let el of elementsCollection) {

    // continue will exit out of the current 
    // iteration and continue on to the next
    if (!el.shouldBeProcessed){
        continue;
    }

    doSomeLengthyOperation();

});

如果您需要在循环中使用异步函数,而这些函数在forEach中不起作用,那么这可能会更有用。例如:


(async fuction(){

for (let el of elementsCollection) {

    if (!el.shouldBeProcessed){
        continue;
    }

    let res;

    try {
        res = await doSomeLengthyAsyncOperation();
    } catch (err) {
        return Promise.reject(err)
    }

});

})()

周育
2023-03-14

我认为最好的方法是使用filter方法,因为在forEach块中返回是没有意义的;有关代码段的示例:

// Fetch all objects in SomeElements collection
var elementsCollection = SomeElements.find();
elementsCollection
.filter(function(element) {
  return element.shouldBeProcessed;
})
.forEach(function(element){
  doSomeLengthyOperation();
});

这将缩小元素集合的范围,只需对应该处理的元素进行过滤即可。

邰勇军
2023-03-14

每个迭代的foreach()将调用您提供的函数。要在任何给定的迭代中停止进一步的处理(并继续下一项),您只需在适当的点从函数返回:

elementsCollection.forEach(function(element){
  if (!element.shouldBeProcessed)
    return; // stop processing this iteration

  // This part will be avoided if not neccessary
  doSomeLengthyOperation();
});
 类似资料:
  • 'continue'或'break'语句与其标签名称之间不允许换行符。 例子 (Example) outerloop: // This is the label name for (var i = 0; i < 3; i++) { console.log("Outerloop: " + i); for (var j = 0; j < 5; j++) { if

  • 跳过当前循环的剩余部分并继续下一次循环。在各种循环中都是有效的。 Continue [, LoopLabel] [AHK_L 59+]:如果指定了,则 LoopLabel 表示此语句所应用的循环;通过标签名或嵌套层级的数值。如果省略或为 1,此语句应用于它所在的最内层循环。LoopLabel 必须为常量,不支持变量和表达式。如果指定标签,则它必须直接指向循环命令。 Continue 的行为如同直接

  • 简介 本章介绍的是Scheme中特有的数据类型——继续(Continuation)。由于其他程序设计语言并没有这种数据类型,因此它难于理解。当下,你并不需要彻底理解清楚,只需要大致了解。 我会讲解广义的继续和简短地介绍Continuation-Passing-Style(CPS),然后再讲解Scheme中的继续。我认为通过这种方式理解继续会比较容易。 广义继续 继续是在返回到顶层(Top leve

  • 当我试图在从Panel1类的下一个JButton触发action事件时调用panel2类的JPanel2时,我得到了NullPointerException。对此如何化解?plzz帮助。 我的最后一个问题JPanel的Nullpointerexception已经被你们成功解决了。请在这方面提供帮助。这个例外正在吞噬我的脑袋。

  • 因此,我尝试将依赖项加载到代码中,然后得到以下结果: TypeLoadException:无法加载“类型”系统。数据SqlClient。SqlConnection“来自程序集”系统。数据,版本=2.0.0.0,区域性=中立,PublicKeyToken=b77a5c561934e089'。系统反射MonoMethodInfo。GetMethodInfo(IntPtr句柄)(at/Users/bui

  • 本文向大家介绍Java嵌套中断/继续,包括了Java嵌套中断/继续的使用技巧和注意事项,需要的朋友参考一下 示例 这是可能的break/continue到外环使用标签声明: Java中的标签没有其他用途。