jQuery.map () и итерация - PullRequest
       32

jQuery.map () и итерация

1 голос
/ 29 октября 2010

Я пробираюсь через O'Reilly jQuery Cookbook . На стр.65 есть пример, который мне кажется неправильным, но я новичок в jQuery (меньше недели), поэтому я полагаю, что весьма вероятно, что я тот, кто запутался.

Код намеревается получить первые три элемента из упорядоченного списка и что-то с ними сделать; для простоты (со стороны книги) в селекторе есть только один список на странице.

Они дают следующий код (я немного упростил, но не в соответствующей части); два внешних слоя - это, конечно, шаблон (закрытие, так что $ будет работать как нужно, и код для запуска при загрузке страницы).

(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.

Ответы [ 3 ]

1 голос
/ 29 октября 2010

Этот цикл никогда не будет выполнен более одного раза.Функционально он эквивалентен if, и я уверен, что автор хотел написать.

На сайте O'Reilly есть список неподтвержденных ошибок .

0 голосов
/ 29 октября 2010

Этот код должен иметь там if, while существует только из-за return, что является небольшим злоупотреблением while в данном случае IMO. 1007 *

В качестве иллюстрации с :lt() вы можете сократить весь этот пример до:

(function($){
  $(function(){
    var arr = $('li:lt(3)').map(function(){
      return $(this).html();
    }).get();
    alert(arr.join(",");
  });
})(jQuery);
0 голосов
/ 29 октября 2010

Да, вы правы в своем понимании.Это плохой пример.

...