使用for循环Mongoose嵌套在数组中的对象的嵌套属性

时间:2019-03-07 04:30:13

标签: node.js mongoose nested schema

我是JS新手(显然)。我正在使用猫鼬,我想知道:为什么在使用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 :(得分:0)

如果检查您的代码,则在第一个控制台中

 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,这就是为什么它不起作用的原因

bcz array.length返回数组中元素的数量, 因此,如果数组包含5个元素(0-4),则array.length返回5

如果您尝试访问array [array.length-1] = 4,则它等于array [4],因此可以正常工作

但是如果您尝试访问array [array.length-0] = 5,则它等于array [5],而数组没有索引5,因此会引发错误。

所以,解决方案只是从1开始循环

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