示例:
var t = $.each(templos_cache, function(f,g){
$.each(g.requer, function(h,j){
if (parseFloat(g.id) == id){
alert(j.nome); // OK, return 'afrodite'.
return j.nome; // wrong, return [Object object].
}
});
return '';
});
查看代码我们可以看到问题...我可以在范围内的变量中设置一个集合,但我认为可以存在一些更优雅的方法来实现这一点。
答案 0 :(得分:11)
要突破$.each()
,只需从回调函数中return false;
。引自jQuery documentation:
我们可以在a处打破$ .each()循环 通过制作特定的迭代 回调函数返回false。 返回非假是与a相同 在for循环中继续声明;它 将立即跳到下一个 迭代。
修改强>
在意识到你可能想要返回一个值之后,你可以简单地将一个对象传递给回调函数,因为它是通过引用传递的。请参阅How to append a string value during assignment in Javascript? - 但这完全没有任何优雅,所以我坚持只在$.each
之外设置一个变量,就像colinmarc所说的那样。
答案 1 :(得分:2)
在我的脑海中,设置变量似乎是最优雅的方式,就像你提到的那样:
var foo = '';
$.each(some_list, function(i, e){
...
if(something) foo = 'stuff';
});
答案 2 :(得分:1)
这样的东西应该做你想要的。它应该遍历templos_cache,并通过g.requer循环,直到id匹配g.id.在这种情况下,它将设置returnValue,并突破内部$ .each循环。并在外部循环中检查是否已设置returnValue,如果是,则跳出循环。
我实际上没有测试过这个。但看起来很稳固
var returnValue = '';
$.each(templos_cache, function(f,g){
$.each(g.requer, function(h,j){
if (parseFloat(g.id) == id){
returnValue = j.nome;
return false;
}
});
if(returnValue != ''){
return false;
}
});
var t = returnValue;
答案 3 :(得分:1)
您可能正在寻找$.map
:
var x = [1, 2, 3, 4, 5];
var y = $(x).map(function(i, n){
return n < 4 ? n+1 : undefined;
});
// y == [2, 3, 4]
如果您只返回一个值,则y
将为[val]
,您始终可以y[0]