2012-01-15 2 views
0

Я пытаюсь выяснить, как правильно проанализировать некоторые значения, возвращаемые из JavaScript API ссылок.Как получить доступ к параметрам объекта в JavaScript

В настоящее время я использую следующий код для прокрутки и печати возвращаемых объектов.

for(var position in profile.positions) 
{ 
    profHTML = profHTML + profile.positions[position]; 
} 

Результат (который получает меня часть пути к разгадке его является:

11[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object] 

По сути сво # объектов (которые, кажется, первая вещь возвращается), а затем каждый объектов

В соответствии с тем, что возвращается, когда я делаю консольный журнал в Chrome, этот код возвращает массив объектов, которые содержат объект с именем «компания». Компания содержит 4 атрибута («id», «industry», , "имя", "тип")

Полагаю, что profile.positions [position] является ссылкой на возвращаемый элемент, однако я не уверен в синтаксисе доступа к объекту и атрибуту компании во время цикла.

Я также не уверен, что было бы лучшей практикой, чтобы не пытаться ссылаться на поле в самом первом цикле, который возвращает количество объектов.

Заранее за вашу помощь.

+1

Можете ли вы дать полный выход JSON вернулся? Трудно определить, какую структуру вы описываете. Кроме того, никогда не используйте цикл 'for'-'in' для массивов: http://bonsaiden.github.com/JavaScript-Garden/#array.general – Domenic

+0

Как я могу вернуть полный вывод JSON? Я буду рад опубликовать. –

+0

Вставьте его в вопрос ... –

ответ

2

Для начала используйте regular for loop, а не for...in loop, чтобы перебирать массив.

var positions = profile.positions, 
    position; 

for(var i=0; i<positions.length; i++) 
{ 
    position = positions[i]; 
    profHTML = profHTML + position; 
} 

Теперь, чтобы получить доступ к одному из свойств position, просто использовать member operator (. или []):

var positions = profile.positions, 
    company; 

for(var i=0; i<positions.length; i++) 
{ 
    company = positions[i].company; 
    console.log(company.id, company.industry, company.name, company.type); 
} 
+2

Я не думаю, что это массив, '.length' массива не перечислим. Это, вероятно, настраиваемый объект типа массива (например, '{0: 0, length: 1}'). Тем не менее, все равно применяется то, что цикл 'for' должен использоваться. – Esailija

+0

Кроме того, не забудьте всегда кэшировать длину массива, а не обращаться к нему на каждую итерацию. Похоже, что это не будет иметь большого значения, но это так. Для доказательства см. Http://jsperf.com/jquery-each-vs-for-loops/2. – GregL

+1

Согласно статистике из теста jsPerf, с которым я связан, он только медленнее кэширует длину в одной или двух конкретных версиях браузеров, а не сильно. Более вероятный результат заключается в том, что он будет быстрее для большинства браузеров. Я согласен, что это не так важно, как различие между 'for (in)' и 'for (var i)', но если вы включите его в примерный код, это поможет поощрять лучшие практики, IMHO. – GregL

Смежные вопросы