Javascript对象中的数组属性是未定义的

我使用Node.js来循环访问从Mongoose获得的Artist结果数组:

 User.find({UserType: "Artist"}, '_id Firstname BIO list_artworks').then((artists) =>{ for (var i=0; i < artists.length; i++){ console.log(artists[i]); } }) 

上面的代码可以find并打印出我要求的Artists所有三个属性。

编辑:这里是我在控制台中看到的一个例子:

 { _id: 'T8fdSmf0e1ua', BIO: 'This is Susan's bio...\n', Firstname: 'Susan', list_artworks: [ 'ID ONE', 'ID TWO', ... ] } 

但是,当我尝试访问属性是一个Artwork ID的数组,一切都是未定义使用console.log()

 for (var i=0; i < artists.length; i++){ console.log(artists[i].list_artworks); } 

当我访问我的艺术家的其他属性,如BIOFirstname ,它成功打印到我的控制台:

 for (var i=0; i < artists.length; i++){ console.log(artists[i].BIO); } 

这是为什么? 在这种情况下,我不认为它与asynchronous代码有关,因为所有的对象都是在then()链中返回的。 如果我打印整个artist对象,那么list_artworks属性显然存在,但是为什么当我尝试访问它时未定义呢?

这是另一个例子。 我打印出每个属性,然后打印对象本身:

 console.log(artist.BIO); console.log("---------------") console.log(artist.Firstname); console.log("---------------") console.log(artist.list_artworks); console.log("---------------") console.log(artist) 

以下是我的控制台上打印的内容:

 --------------- Mike --------------- undefined // <--- when I access the property itself --------------- { _id: '599asdsdasd232d23d2', Firstname: 'Mike', BIO: '', list_artworks: // <-- why does it show up here? [ '6cohpx7d23asu', 'W4Fgs23X5aXds',... 

这是我的整个代码库:

 setTimeout(function(){ User.find({UserType: "Artist"}, '_id Firstname BIO list_artworks').then((artists) =>{ console.log(artists.length); for (var i=0; i < artists.length; i++){ artist = artists[i]; console.log(artist.BIO); console.log("---------------") console.log(artist.Firstname); console.log("---------------") console.log(artist['list_artworks']); console.log("---------------") console.log(artist) } } ).catch((err)=>{console.log(err)}); }, constants.NLP_TRAINING_INTERVAL); 

调用艺术家的toObject

 artist = artists[i].toObject(); 

尝试这个

 User.find({UserType: "Artist"}, '_id Firstname BIO list_artworks').then((artists) =>{ for (var i=0; i < artists.length; i++){ console.log(artists[i]['list_artworks']); } } 

尝试这个:

 User.find({UserType: "Artist"}, '_id Firstname BIOlist_artworks').then((artists) =>{ var index = i.toString(); console.log(artists[index]['list_artworks']); } }