$ .each () не работает, когда зацикливается только один элемент? - PullRequest
3 голосов
/ 26 декабря 2010

У меня был вызов каждого метода для некоторых getJSON результатов:

    if(data && data.query && data.query.results)
    {                
        $.each(data.query.results.span, function(i, item)
        {
            console.log("Content:" + item.content); // FAILS --> UNDEFINED!!
         });
    }

Я не мог понять, почему он ничего не отображает, хотя я мог видеть JSON, возвращающий единственный результат.

Итак, я удалил каждый и сделал следующее:

    if(data && data.query && data.query.results)
    {
            console.log("Content:" + data.query.results.span.content); // WORKS!!
    }

Теперь это работает.

Нет ли способа использовать each(), когда есть только одинрезультат?

Ответы [ 3 ]

8 голосов
/ 26 декабря 2010

$.each ожидает массив в первом аргументе, поэтому что-то вроде этого:

$.each([ data.query.results.span ], function(i, item) { ... } 

должно работать. Квадратные скобки создают отдельный массив элементов.

1 голос
/ 26 декабря 2010

Если первый аргумент $.each() не является массивом, он будет перебирать свойства (из-за отсутствия лучшего термина) объекта.

Например:

var a = {first: "abc", second: "def"};
$.each(a, function(i, item){...});

Функция, переданная в $.each, будет вызываться дважды.В первый раз я буду «первым», а пункт будет «abc».Во второй раз я буду «вторым», а пункт будет «def».

0 голосов
/ 20 августа 2015

Сначала дважды проверьте коллекцию, если это уже массив объектов.Если нет, перезаписать вашу переменную, вложенную в себя как массив объектов:

if (MyCollection[0]==undefined) MyCollection = [MyCollection];
$.each(MyCollection, function (key,item) { ....
...