如何从$ .each操作返回? (jQuery的)

时间:2011-07-07 19:09:22

标签: javascript jquery

示例:

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 '';
 });

查看代码我们可以看到问题...我可以在范围内的变量中设置一个集合,但我认为可以存在一些更优雅的方法来实现这一点。

4 个答案:

答案 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]

访问该值