Javascript 如何突破.each()并为函数返回值
我想使用Javascript 如何突破.each()并为函数返回值,javascript,jquery,Javascript,Jquery,我想使用return false来中断.each(),但同时也返回一个值。我该怎么做 请参考变通功能,了解我正在尝试执行的操作: function HasStores(state) { var statehasstores = false; $(stores).each(function (index, store) { if (state == store.state && store.category == "meyers") {
return false
来中断.each(),但同时也返回一个值。我该怎么做
请参考变通功能,了解我正在尝试执行的操作:
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;
}
Id在伪代码中要做的是:
Function () {
for() {
if found {
return true;
}
}
return false;
}
你所建议的是做这件事的方法。我不认为它是一种变通方法,而更认为它是一种习惯用法。你做得对 引自
“我们可以通过返回false从回调函数中停止循环。”或者,您可以使用
for
循环而不是each()
,只返回值。使用循环外的变量获取值,然后使用它
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);
你这样做很好
这对你没用?你能展示更多的背景吗
- 要有创意:
try {
$(stores).each(function (index, store) {
if(state == store.state && store.category == "meyers"){
throw store;
}
});
}
catch(e) {
// you got e with the value
}
不,我只是开玩笑,不要用这个:)。这是我喜欢分享的一个想法 好吧,我想这一点有点疑问,所以我想在这里说得更清楚一些:
- 当jquerydoc说:“我们可以通过返回false来停止回调函数中的循环。”您可以:
函数(){
for(){
如果找到{
返回true;
}
} 返回false; }
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;
}
当然还有很多其他的方法来实现这一点,但我认为这是最简单的方法
库帕-轻松 正如其他人从中注意到的,返回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;
}
当然,使用双重否定有点愚蠢,并且有副作用,每次错误迭代都会将“true”保存到statehastores,反之亦然,但是最终结果应该是相同的,并且不再有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我最初对$的内容感兴趣。每个(…
实际返回。正如它在上所说的,“方法返回其第一个参数,即迭代的对象”,但实际上解决方案甚至不要求您使用该事实
PPS需要一个返回值的函数?当然是一个外部函数。它已经在这样做了!看我的例子,这是第一个,所以我在问题OP中找到了我想要的答案,问了lolI,我对此感到很抱歉……但我真的很喜欢创造性思维^^我不记得什么是“正统的”目前JS中的观点是将异常作为常规代码技术来使用。某些语言的“大师”在某些时候也涉足过这个想法……但对我来说,作为一个傻瓜,我倾向于认为“异常情况下的异常”,或者“当代码对某件事情产生异常时,抛出异常”。其中一个,嗯,例外可能是备选方案太复杂。但这里不是这样。避免使用这种例外的一个实际原因是,你不知道处理它们所涉及的开销。这并不能回答问题。他还想在返回false后返回一个值,即区分
return false
从简单地终止循环开始。@Ariel怎么样?如果满足条件(就像OP的伪代码命令),返回值是true
,并且它打破了循环。@cimevidas(JS,而不是JQ,some
方法)是完全不相关的。我很惊讶这个答案有36(!)向上投票并保留接受的答案(因为OP可以更改)。请查看我的答案。@我不理解您的答案。据我所见,OP需要一个函数来检查jQuery集合是否包含具有给定<代码>状态值的元素。