如何突破.each()并返回一个函数的值
我想使用return false
来打破一个.each(),但也同时返回一个值。 我怎样才能做到这一点?
请参阅一个解决方法function,看看我想要做什么:
function HasStores(state) { var statehasstores = false; $(stores).each(function (index, store){ if(state == store.state && store.category == "meyers"){ statehasstores = true; return false; //break } }); return statehasstores; }
伪代码喜欢做的是:
Function () { for() { if found { return true; } } return false; }
有创意:
try { $(stores).each(function (index, store) { if(state == store.state && store.category == "meyers"){ throw store; } }); } catch(e) { // you got e with the value }
不,我只是在开玩笑,不要用这个:)。 这是我喜欢分享的想法。
在循环外部使用一个variables来获取值,然后使用它。
var value; $(stores).each(function (index, store) { if(state == store.state && store.category == "meyers"){ statehasstores = true; value = store; // added line return false; //break } }); alert(value);
你做的方式就好了。 我已经在jsFiddle上进行了testing,在这里看到一个例子 。
这不适合你? 你能展示更多的上下文吗?
- jQuery。每个
或者,您可以使用for
循环而不是each()
,只是返回值。
你所build议的是这样做的方式。 我认为这不是一个解决方法,更像一个成语。
好吧,我想这个问题有点怀疑,所以也许我在这里更清楚一点:
-
当jquery doc说:“我们可以通过返回false来停止callback函数内的循环。” 你也是 :
Function(){for(){if found {return true; }
}返回false; }
这并不意味着你的function将返回true时,findsearch的元素。 相反,它将始终返回false。
所以为了让你的function像你这样做,
Function () { variable found = false; foreach() { if found { found = true; return false; // This statement doesn't make your function return false but just cut the loop } } return found;
}
当然还有很多其他的方法可以执行,但我认为这是最简单的方法。
Coopa – 简单!
正如其他人已经从jQuery的每一个注意到的,返回false将只从循环中断,不返回值,返回true,但将“继续”,并立即开始下一个迭代。 有了这些知识,就可以像这样简化代码:
function HasStores(state) { var statehasstores = false; $(stores).each(function (index, store){ // continue or break; statehasstores = !(state == store.state && store.category == "meyers")) return statehasstores; }); return !statehasstores; }
这当然有点愚蠢,使用双重否定,并有副作用,为每一个错误的迭代保存“真实”的状态存储,反之亦然,但最终的结果应该是相同的,你不再有这个if语句。
怎么样:
$.each( myObj, function( key, value ){ ... if( sthg... ){ myObj.somethingWentHorriblyWrong = true; return false; } }); if( myObj.somethingWentHorriblyWrong ){ // ... do something, not forgetting to go: delete myObj.somethingWentHorriblyWrong; }
PS我最初对$.each(...
实际返回)感兴趣,正如它在相关的JQ页面上所说,“该方法返回它的第一个参数,被迭代的对象”,但实际上解决scheme甚至不要求你使用这个事实…
PPS需要一个返回值的函数? 当然包裹在外面的function。