JS странная ошибка: не удается прочитать свойство undefined - PullRequest
0 голосов
/ 05 января 2019

Описание проблемы в коде. Почему это происходит ??

var response = JSON.parse(xhr.responseText);
console.log(response[0].conversationUsers.length); //OK, console outputs "2"
  for (i = 0; i < response.length; i++) {
  for (j = 0; j < response[i].conversationUsers.length; j++) { //Error 'cannot read property', but it has to be interpreted "j = 0; j < 2; j++" and it worked in console.log
          ...
        }
      }

UPD. Я добавил временную переменную, и она работает.

for (j = 0; j < response[i].conversationUsers.length; j++) //this way doesn't work

var temp = response[i].conversationUsers;
for (j = 0; j < temp.length; j++) //this way works

Вопрос можно закрыть, но есть идеи, почему так?

Ответы [ 2 ]

0 голосов
/ 05 января 2019

Вы используете console.log() только для первого объекта в этом массиве. Я предлагаю вам попробовать:

var response = JSON.parse(xhr.responseText);
for (i = 0; i < response.length; i++) {
  console.log(response[i].conversationUsers); // should be an array
  for (j = 0; j < response[i].conversationUsers.length; j++) {
          ...
  }
}

Если вы получили undefined на своей консоли, то при этом вы определили свою проблему.

Дело в том, что для первого элемента в массиве response[0].conversationUsers имеет значение, которое является массивом. Это может быть не так для каждого элемента в этом массиве, и поэтому некоторые из этих элементов могут не иметь свойства длины.

0 голосов
/ 05 января 2019

Вы пытаетесь выполнить итерацию внутри свойства length. Попробуйте убрать длину. Как это

    var response = JSON.parse(xhr.responseText);
    console.log(response[0].conversationUsers.length);
    for (i = 0; i < response; i++) {
      for (j = 0; j < response[i].conversationUsers; j++) {
          ...
      }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...