我使用下面的代码,当条件成立时我需要退出循环,我尝试每一个都没有成功,任何想法?
数组,我无法更改它, 当条件为真时,当然循环仍在处理......
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条件为真时...
答案 0 :(得分:1)
您只需使用_.every
退出return
功能即可。
_.every(provider, function (config) {
if (config.pa === 'aa') {
//now need to exit
console.log("true")
return; // --> just return
}
});
答案 1 :(得分:0)
这里你没有使用循环。您正在使用更高阶的功能。 break
,return
或continue
将毫无帮助。
这些高阶函数的想法是,你不用担心少关于它们何时打破循环:这种担心会落到库函数的实现上。事实上,这正是这个实现的作用:https://github.com/jashkenas/underscore/blob/master/underscore.js#L244-L255
所以,我不想问“我如何打破循环”,而是怀疑你是否对你所表达的过滤器的正确性充满信心。事实上,我认为你在这里的链式函数中可能有一个嵌套级别太多,但我不能确定你想要达到的目标,因此我无法对此表现出自信。
需要阅读函数文档的另一件事是,every
中的谓词需要返回一个值。现在你的所有时间都会返回undefined
。同样,Javascript默认不返回函数的最后一个表达式的值。因此,_.every
和config.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”)下面)
中断;