2010-10-29 95 views
1

我正在通过O'Reilly jQuery Cookbook。在p.65中,有一个例子对我来说看起来不太合适,但我对jQuery不太熟悉(不到一周),所以我认为我很可能是一个感到困惑的人。jQuery.map()和迭代

该代码打算从有序列表中获得前三项&对它们做些什么;为了简单起见(在书的部分),选择器中只有一个列表。

他们给出了下面的代码(我稍微简化了一下,但没有在相关部分);外层的两层当然是样板文件(关闭,因此$将按需要工作,并且代码在页面加载时发生这种情况)。

(function($){ 
    $(document).ready(function(){ 
     var arr = $.map($('li'), function(item, index){ 
      while (index < 3) 
      { 
       return $(item).html(); 
      } 
      return null; 
     }); 
     /* do something with the resulting array; 
      I've deliberately simplified from the book here */ 
     alert(arr.join(","); 
    }); 
})(jQuery); 

的显式迭代(while)没有道理给我。据我了解,内部匿名函数应该为数组的每个元素调用一次,所以我期望if,而不是while

回答

1

该循环将永远不会执行多次。它在功能上等同于if,我相信这就是作者的意图。在O'Reilly网站上有unconfirmed errata list

+0

的第一包装是不是'document.ready'处理程序。 – 2010-10-29 16:39:18

+0

也不是。今天真糟糕! – lonesomeday 2010-10-29 16:40:25

+0

明白了。当然,回报可以避免实际上不正确,但'如果'会更加清晰。 – 2010-10-29 16:46:42

0

是的,你的理解是正确的。这是一个不好的例子。

0

该代码应该if那里,while只存在因为return,这是一个有点while在这种情况下,滥用的,海事组织。

:lt()说明,可以缩短整个那个例子下来:

(function($){ 
    $(function(){ 
    var arr = $('li:lt(3)').map(function(){ 
     return $(this).html(); 
    }).get(); 
    alert(arr.join(","); 
    }); 
})(jQuery); 
+2

通过返回语句将无限期保存下来。鉴于微小的代码修改,仍然非常差,并且可能不安全。 – user113716 2010-10-29 16:40:53

+0

你得到相同的输出while或if - 但如果显然是正确的。 – ScottE 2010-10-29 16:41:08

+0

@patrick - 哎呀你是对的,专注于重写这个 – 2010-10-29 16:41:29