我正在寻找一种方法来停止下划线.js _.each()方法的迭代,但找不到解决方案。如果返回false, jQuery .each()会中断。
是否有方法停止用下划线each()?
_([1,2,3]).each(function(v){
if (v==2) return /*what?*/;
})
我正在寻找一种方法来停止下划线.js _.each()方法的迭代,但找不到解决方案。如果返回false, jQuery .each()会中断。
是否有方法停止用下划线each()?
_([1,2,3]).each(function(v){
if (v==2) return /*what?*/;
})
当前回答
也许你需要使用下划线的any()或find(),它们在满足条件时将停止处理。
其他回答
同样值得注意的是,每个循环不能从- to中打破 Break,使用_。找到代替。
http://underscorejs.org/#each
你不能用下划线打断forEach,因为它模仿EcmaScript 5本机行为。
您不能脱离each方法—它模拟本机forEach方法的行为,并且本机forEach不提供转义循环(除了抛出异常)。
然而,并不是所有的希望都失去了!你可以使用数组。每一个方法。:)
从这个链接:
each对数组中的每个元素执行一次所提供的回调函数,直到找到回调函数返回false值的元素为止。如果找到这样的元素,every方法立即返回false。
换句话说,你可以做一些像这样复杂的事情(链接到JSFiddle):
[1, 2, 3, 4].every(function(n) {
alert(n);
return n !== 3;
});
这将提醒1到3,然后“跳出”循环。
您使用的是underscore.js,因此您将很高兴地了解到它确实提供了一个every方法——它们将其称为every,但正如该链接所提到的,它们还提供了一个别名all。
也许你需要使用下划线的any()或find(),它们在满足条件时将停止处理。
更新:
你实际上可以通过在内部抛出一个错误并在外部捕获它来“打破”:如下所示:
try{
_([1,2,3]).each(function(v){
if (v==2) throw new Error('break');
});
}catch(e){
if(e.message === 'break'){
//break successful
}
}
这显然会对您的代码在循环中触发的任何其他异常产生一些影响,因此请谨慎使用!