Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.08.2011, 17:20
Профессор
Отправить личное сообщение для Триви Посмотреть профиль Найти все сообщения от Триви
 
Регистрация: 23.04.2010
Сообщений: 354

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

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

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

    }
}


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

спасибо
Ответить с цитированием
  #2 (permalink)  
Старый 24.08.2011, 17:26
VKS VKS вне форума
Профессор
Отправить личное сообщение для VKS Посмотреть профиль Найти все сообщения от VKS
 
Регистрация: 24.09.2010
Сообщений: 178

Где вы видите у себя массив объектов? У вас тут просто 1 объект в формате json.
jQuery.parseJSON( json ) - на выходе получите объект javascript;
Ответить с цитированием
  #3 (permalink)  
Старый 24.08.2011, 17:49
Профессор
Отправить личное сообщение для Триви Посмотреть профиль Найти все сообщения от Триви
 
Регистрация: 23.04.2010
Сообщений: 354

Хорошо, как перебрать потом этот объект?
Ответить с цитированием
  #4 (permalink)  
Старый 24.08.2011, 18:07
Профессор
Отправить личное сообщение для Триви Посмотреть профиль Найти все сообщения от Триви
 
Регистрация: 23.04.2010
Сообщений: 354

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

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

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

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

});


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

Последний раз редактировалось Триви, 24.08.2011 в 18:13.
Ответить с цитированием
  #5 (permalink)  
Старый 24.08.2011, 18:48
Профессор
Отправить личное сообщение для nikita.mmf Посмотреть профиль Найти все сообщения от nikita.mmf
 
Регистрация: 01.02.2010
Сообщений: 364

var sellers = data.sellers, seller, sellerId, sellerProp;
for ( sellerId in sellers ) {
    for ( sellerProp in (seller = sellers[ sellerId ]) ) {
        window.console.log(seller[ sellerProp ]);
    }
}
Ответить с цитированием
  #6 (permalink)  
Старый 24.08.2011, 19:46
Профессор
Отправить личное сообщение для Триви Посмотреть профиль Найти все сообщения от Триви
 
Регистрация: 23.04.2010
Сообщений: 354

Сообщение от nikita.mmf Посмотреть сообщение
var sellers = data.sellers, seller, sellerId, sellerProp;
for ( sellerId in sellers ) {
    for ( sellerProp in (seller = sellers[ sellerId ]) ) {
        window.console.log(seller[ sellerProp ]);
    }
}
я не понимаю кода, не могли бы Вы пояснить, что тут происходит?
Ответить с цитированием
  #7 (permalink)  
Старый 25.08.2011, 01:29
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от Триви Посмотреть сообщение
я не понимаю кода, не могли бы Вы пояснить, что тут происходит?
т.к. я увидел у тебя 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 )
        });
    }
});
Ответить с цитированием
  #8 (permalink)  
Старый 25.08.2011, 13:01
Профессор
Отправить личное сообщение для Триви Посмотреть профиль Найти все сообщения от Триви
 
Регистрация: 23.04.2010
Сообщений: 354

Спасибо, большое, разобрался наконец таки
Теперь умею листать объекты)))
Ответить с цитированием
  #9 (permalink)  
Старый 25.08.2011, 13:11
Профессор
Отправить личное сообщение для nikita.mmf Посмотреть профиль Найти все сообщения от nikita.mmf
 
Регистрация: 01.02.2010
Сообщений: 364

Сообщение от Триви
я не понимаю кода, не могли бы Вы пояснить, что тут происходит?
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

Последний раз редактировалось nikita.mmf, 25.08.2011 в 13:18.
Ответить с цитированием
  #10 (permalink)  
Старый 25.08.2011, 13:13
Профессор
Отправить личное сообщение для Триви Посмотреть профиль Найти все сообщения от Триви
 
Регистрация: 23.04.2010
Сообщений: 354

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

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массив объектов или объект объектов vladlen Общие вопросы Javascript 19 30.10.2010 03:10
Перебор свойвств и методов объектов Иваннн Events/DOM/Window 8 27.08.2010 15:11
Быстрый поиск объектов Shasoft Общие вопросы Javascript 7 30.07.2009 05:28
Можно ли как для произвольного массива создавать вызовы функций , имеющих на входе kefi Общие вопросы Javascript 3 17.04.2009 16:53
вставка элементов массива в текстовую форму по клику olezyk Общие вопросы Javascript 3 21.03.2009 22:01