如果为true则退出循环

时间:2015-08-05 09:07:49

标签: javascript underscore.js lodash

我使用下面的代码,当条件成立时我需要退出循环,我尝试每一个都没有成功,任何想法?

数组,我无法更改它, 当条件为真时,当然循环仍在处理......

https://jsfiddle.net/z4oxsa1b/10/

 var json = {
  "prov": [
    {
      "save": {
        "pa": "aa",
        "func": "sa"

      },
      "delete": {
        "pa": "sof",
        "func": "delete"

      }
    }
  ]
};

var array = [];
array.push(json);

_.filter(array, function (config) {
    config['prov'].some(function (provider) {
        _.every(provider, function (config) {
            if (config.pa === 'aa') {
                //now need to exit
                console.log("true")
            }
        });
    });
});

更新:答案没有帮助,假设我调用方法中的过滤器循环我希望退出此 方法当if条件为真时...

4 个答案:

答案 0 :(得分:1)

您只需使用_.every退出return功能即可。

_.every(provider, function (config) {
    if (config.pa === 'aa') {
        //now need to exit
        console.log("true")
        return; // --> just return
    }
});

答案 1 :(得分:0)

这里你没有使用循环。您正在使用更高阶的功能。 breakreturncontinue将毫无帮助。

这些高阶函数的想法是,你不用担心关于它们何时打破循环:这种担心会落到库函数的实现上。事实上,这正是这个实现的作用:https://github.com/jashkenas/underscore/blob/master/underscore.js#L244-L255

所以,我不想问“我如何打破循环”,而是怀疑你是否对你所表达的过滤器的正确性充满信心。事实上,我认为你在这里的链式函数中可能有一个嵌套级别太多,但我不能确定你想要达到的目标,因此我无法对此表现出自信。

需要阅读函数文档的另一件事是,every中的谓词需要返回一个值。现在你的所有时间都会返回undefined。同样,Javascript默认不返回函数的最后一个表达式的值。因此,_.everyconfig.prov.some(...前面应加上return指令。

另一种出路可能是实际使用good'ol Javascript循环,如果你对程序风格而不是功能风格更加舒适,那么交易简洁明了;在那里你将能够使用内置插件。如果你想打破外循环,标记的循环可能会有所帮助。

答案 2 :(得分:-1)

您应该查看JavaScript中的Break and Continue语句。

_.filter(array, function (config) {
  config['prov'].some(function (provider) {
    _.every(provider, function (config) {
      if (config.pa === 'aa') {
        //now need to exit
        break; // exits the if statement
        console.log("true")
      }
    });
  });
});

答案 3 :(得分:-4)

尝试break命令(就在console.log(“true”)下面)

  

中断;