Доступ к свойству объекта, вложенного в массив, вложенный в объект с помощью цикла for Mongoose. - PullRequest
0 голосов
/ 07 марта 2019

Я новичок в JS (ясно).Я использую mongoose, и мне было интересно: почему я получаю ошибку при обращении к свойству с помощью цикла for?

Я использую схему, которая содержит встроенную схему

Usr.findOne({numCli: req.body.numTar}, function(err, doc){

  if (doc) {

    var i = 0;
    const lengthAcc = doc.acc.length;
//can access prop individually
    console.log(doc.acc[lengthAcc-1].propOne);

// can't using for loop: TypeError: Cannot read property 'propOne' of undefined
    for (i = 0; i < 10; i++) {
    console.log(doc.acc[lengthAcc - i].propOne);


    }
  }
 });

1 Ответ

0 голосов
/ 07 марта 2019

Если вы проверяете свой код, то в первой консоли

 console.log(doc.acc[lengthAcc-1].propOne);

вы пытаетесь получить доступ к doc.acc [lengthAcc-1] .propOne, чтобы он работал

, но во второй консоли

console.log(doc.acc[lengthAcc - i].propOne);

вы пытаетесь получить доступ к doc.acc [lengthAcc-i] .propOne и i = 0, поэтому это doc.acc [lengthAcc-0] .propOne, поэтому он не работает

bczarray.length возвращает номер элемента в массиве, поэтому если массив содержит 5 элементов (0-4), то array.length вернет 5

и если вы попытаетесь получить доступ к массиву [array.length - 1] = 4, эторавно массиву [4], поэтому он работает

, но если вы попытаетесь получить доступ к массиву [array.length - 0] = 5, он будет равен массиву [5], а массив не имеет индекса 5, поэтому он выдаст ошибку.

Итак, решение - это просто запуск цикла с 1

for (i = 1; i < 10; i++) {
console.log(doc.acc[lengthAcc - i].propOne);
}
...