javascript对象数组不变

这段代码是关于从MongoDB获取数据并将“_id”元素更改为“id元素”。 但我发现对象数组没有改变。

router.get('/loadList', (req,res) => { Post.find({}, (err, list) => { //fetching data to list if(err) { return res.json({success : false}); } else { let new_list; //change _id to id new_list = list.map((obj) => { obj.id = obj._id; delete obj._id; return obj; }); console.log(new_list); /* // _id is still here and id is not created [{_id: '58e65b2d1545fe14dcb7aac5', title: 'asdfassafasdf', content: 'dfasfdasdf', time: '2017-04-06T15:13:49.516Z', writer: { _id: '100975133897189074897', displayName: 'Kiyeop Yang' }, coords: { y: '310.3999786376953', x: '139' }, __v: 0 } ] */ 

但是这个代码就像我想要的那样工作

  let list2 = JSON.parse(JSON.stringify(list)); new_list = list2.map((obj) => { obj.id = obj._id; delete obj._id; return obj; }); console.log(new_list); /* // _id is deleted and id is created { title: 'asdfassafasdf', content: 'dfasfdasdf', time: '2017-04-06T15:13:49.516Z', writer: { _id: '100975133897189074897', displayName: 'Kiyeop Yang' }, coords: { y: '310.3999786376953', x: '139' }, __v: 0, id: '58e65b2d1545fe14dcb7aac5' } ] */ return res.json({ success : true, list }); } }); 

});

我认为这与深浅拷贝有关。 但我不知道是什么原因造成的。

谢谢

这是因为Post.find根据创build的Schema返回mongoose对象。 你正在寻找的是返回纯javascript对象的toObject函数。 所以在你的callback调用list.toObject(); 你可以在toObject的文档中阅读更多关于toObject函数: http : toObject

或者,您可以使用精益选项,这将告诉mongoose返回纯JavaScript对象: http : //mongoosejs.com/docs/api.html#query_Query-lean