Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Перебор массива объектов (https://javascript.ru/forum/jquery/20977-perebor-massiva-obektov.html)

Триви 24.08.2011 17:20

Перебор массива объектов
 
Ребята, совсем не понимаю как разбирать сложные массивы объектов(((
Научите, PLZ!!! :cray:
Везде в статьях простые примеры, а если попадаются сложные,
то как разбирать данные не показано!
Помогите разобрать с помощью jQuery такой вот, например, ответ от сервера:

{
  "total":"18",
  "sellers":
    {
      "517":
         {
            "seller_name" : "Вася Пупкин и ко", "num":"3"
         }
      "688":
         {
            "seller_name" : "Роги и копытцы", "num":"15"
         }

       и т.д. и т.п..............

    }
}


где 517 и 688 - id продавца

спасибо

VKS 24.08.2011 17:26

Где вы видите у себя массив объектов? У вас тут просто 1 объект в формате json.
jQuery.parseJSON( json ) - на выходе получите объект javascript;

Триви 24.08.2011 17:49

Хорошо, как перебрать потом этот объект?

Триви 24.08.2011 18:07

В k получаем id продавца, но как потом название переменной сделать по её значению???
Ну типа как в php используется двойной знак $$

Грубо говоря, смысл такой:

jQuery.each(data.sellers, function(k, val) {
    
    currentSeller = data.sellers. + $$k;

    jQuery.each(currentSeller, function(k1, val2) {
          ........
    });

});


Как это делается в JS ? Не могу понять своими php-шными мозгами )))

nikita.mmf 24.08.2011 18:48

var sellers = data.sellers, seller, sellerId, sellerProp;
for ( sellerId in sellers ) {
    for ( sellerProp in (seller = sellers[ sellerId ]) ) {
        window.console.log(seller[ sellerProp ]);
    }
}

Триви 24.08.2011 19:46

Цитата:

Сообщение от nikita.mmf (Сообщение 122174)
var sellers = data.sellers, seller, sellerId, sellerProp;
for ( sellerId in sellers ) {
    for ( sellerProp in (seller = sellers[ sellerId ]) ) {
        window.console.log(seller[ sellerProp ]);
    }
}

я не понимаю кода, не могли бы Вы пояснить, что тут происходит?

melky 25.08.2011 01:29

Цитата:

Сообщение от Триви (Сообщение 122189)
я не понимаю кода, не могли бы Вы пояснить, что тут происходит?

т.к. я увидел у тебя jQ, то держи пример на ней же, с комментариями

a = {
    "total": "18",
    "sellers": {
        "517": {
            "seller_name": "Вася Пупкин и ко",
            "num": "3"
        }
        "688": {
            "seller_name": "Роги и копытцы",
            "num": "15"
        }
    }
};

$.each(a, function(i, b) {
    // у нас i будет "total"
    // или "sellers"
    // при таком 'a', что выше
    
    // в 'b' будет 'a[i]'
    
    /* делаем чтото */

    // a.sellers - объект. true, то есть
    if ($.isPlainObject(b)) {
        $.each( b, function(seller_id, seller_opts){
            // имена переменных говорят сами за себя
            
            /* делаем что-то с продавцами */
            alert( seller_opts.seller_name )
        });
    }
});

Триви 25.08.2011 13:01

Спасибо, большое, разобрался наконец таки :thanks:
Теперь умею листать объекты)))

nikita.mmf 25.08.2011 13:11

Цитата:

Сообщение от Триви
я не понимаю кода, не могли бы Вы пояснить, что тут происходит?

var sellers = data["sellers"];		//получаем всех подавцов из данных, 
									//аналочично ассоциативному массиву из php
var seller, sellerId, sellerProp; 	//объявляем вспомогательные переменные
for ( sellerId in sellers ) {	//перебираем аналогично foreach из php
                                //здесь sellerId ключ "ассоциативного массива" sellers
    for ( sellerProp in (seller = sellers[ sellerId ]) ) {	//в переменную seller получаем значения текущего продавца 
															//и дальше перебираем уже по его ключам sellerProp
        window.console.log(seller[ sellerProp ]);
    }
}

В js нет ассоциативных массивов, есть объекты, я использую термин "ассоциативный массив", только в целях аналогии с php

Триви 25.08.2011 13:13

В догонку..
Насколько я понял, в моей строке после применения к ней parseJSON получается объект с вложенными в него объектами? Правильно? Никакими массивами же тут и не пахнет?
А функция $.each в jQ умеет листать всё.. и массивы и объекты..
Просто в зависимости от данных иногда удобно создавать массивы, а иногда объекты.. так?

пи.си. Ещё бы понять, что такое в массив объектов и объект массивов,
и когда их удобно городить, было бы совсем хорошо))


Часовой пояс GMT +3, время: 16:08.