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 продавца
спасибо
|
|
24.08.2011, 17:26
|
Профессор
|
|
Регистрация: 24.09.2010
Сообщений: 178
|
|
Где вы видите у себя массив объектов? У вас тут просто 1 объект в формате json.
jQuery.parseJSON( json ) - на выходе получите объект javascript;
|
|
24.08.2011, 17:49
|
Профессор
|
|
Регистрация: 23.04.2010
Сообщений: 354
|
|
Хорошо, как перебрать потом этот объект?
|
|
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.
|
|
24.08.2011, 18:48
|
Профессор
|
|
Регистрация: 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 ]);
}
}
|
|
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 ]);
}
}
|
я не понимаю кода, не могли бы Вы пояснить, что тут происходит?
|
|
25.08.2011, 01:29
|
sinistral
|
|
Регистрация: 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 )
});
}
});
|
|
25.08.2011, 13:01
|
Профессор
|
|
Регистрация: 23.04.2010
Сообщений: 354
|
|
Спасибо, большое, разобрался наконец таки
Теперь умею листать объекты)))
|
|
25.08.2011, 13:11
|
Профессор
|
|
Регистрация: 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.
|
|
25.08.2011, 13:13
|
Профессор
|
|
Регистрация: 23.04.2010
Сообщений: 354
|
|
В догонку..
Насколько я понял, в моей строке после применения к ней parseJSON получается объект с вложенными в него объектами? Правильно? Никакими массивами же тут и не пахнет?
А функция $.each в jQ умеет листать всё.. и массивы и объекты..
Просто в зависимости от данных иногда удобно создавать массивы, а иногда объекты.. так?
пи.си. Ещё бы понять, что такое в массив объектов и объект массивов,
и когда их удобно городить, было бы совсем хорошо))
|
|
|
|