2014-12-04 3 views
0

Я не могу достичь своих объектных переменных, я, вероятно, просто делаю фиктивную ошибку где-то. Console.log моего массива объектов (pResult) выглядеть следующим образом, первый объект расширен, но все они похожи друг на друга:не может получить доступ к объекту объекта json

[Object, Object, Object, Object, Object, Object, Object, Object, Object] 

0: Object 
depTime: "2014-12-04 18:35" 
destination: "Norsesund station" 
nr: "562" 
operator: "Västtrafik" 
typText: "Buss" 
__proto__: Object 
1: Object 
2: Object 
3: Object 
4: Object 
5: Object 
6: Object 
7: Object 
8: Object 
length: 9 
__proto__: Array[0] 

Я пытаюсь это сделать ...

for (var i = 0; i <= pResult.length; i++) { 
    var html = html + '<tr>'; 
    var html = html + '<td>'; 
    var html = html + pResult[i].depTime; 
    var html = html + '</td>'; 
    var html = html + '</tr>'; 
} 

... но попасть с этой ошибкой:

Uncaught TypeError: Cannot read property 'depTime' of undefined 
+0

В соответствии с вашим результатом определяется 'pResult.depTime', но' pResult [i] .depTime' не является. Я что-то упускаю? – philtune

+0

Просто в стороне: это не имеет никакого отношения к JSON; вы имеете дело с объектами JavaScript, а не с текстовыми обозначениями, описывающими объекты. (Если ваш вопрос касался разбора текста JSON на объекты, то тег '[json]' был бы уместным.) – apsillers

ответ

3

Изменение:

i <= pResult.length; 

To:

i < pResult.length; 

Массив 0 на основе индексируются, поэтому, если он имеет длину 3, у вас есть только индексы 0,1,2

+0

Это то, что я видел, pResult не существует для pResult [9] ... 9 является длиной. – rfornal

+0

спасибо, работает. согласится, как только это позволит мне. –

+0

@MattiasSvensson не проблема, удачи с вашим проектом – juvian

0

попробовать это:

for (var i = 0; i < pResult.length; i++) { 
     var html = '<tr>'; 
      html += html + '<td>'; 
       html += html + pResult[i].depTime; 
      html += html + '</td>'; 
     html += html + '</tr>'; 
} 

Проблема в том, вы не loopin до длины массивов, но массива начинаются с 0 индекса так
если у вас есть массив
var pResult= [object,object,object];
pResult.length =3
pResult[3] не существует, поэтому он не определен.
Примечание DonT воссоздать переменную, когда вы просто хотите добавить текст просто добавить его к существующему Например HTML + = «добавленный текст»

1

Вместо того, чтобы использовать петлю, вы можете просто использовать reduce:

var html = pResult.reduce(function(previousValue, currentValue) { 
    return previousValue + '<tr><td>' + currentValue.depTime + '</td></tr>'; 
}, ''); 

Обратите внимание, что это работает только в IE   9+ (но он работает во всех других современных браузерах), поэтому, если вам нужно поддерживать более старые версии IE, вы можете полилизовать этот метод.

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