我试图通过评论数来更改每个帖子中的评论,但是当我输入express的答案时,数组会保留原始数据。
我尝试使用另一个Object和map代替foreach,但没有任何效果。
router.get('/', function(req, res, next) {
postModel.find({}, function(err, posts){
if(err){
next(err)
}else{
posts.forEach((post,i) => {
posts[i].comments= post.comments.length;
});
res.json({ status: 'success' ,message: "Posts Encontrados!!" , data : {posts: posts}});
}
});
});
新代码:
router.get('/', async function(req, res, next) { //get all posts
var p;
await postModel.find({}, function(err, posts){
if(err){
next(err)
}else{
p= posts;
//res.json({ status: 'success' ,message: "Posts Encontrados!!" , data : {posts: posts}});
}
});
p.forEach((post,i) => {
p[i].comments= post.comments.length;
});
res.json({ status: 'success' ,message: "Posts Encontrados!!" , data : {posts: p}});
});
答案 0 :(得分:1)
来自MDN:
forEach()
不会使调用它的数组发生突变(尽管回调可以被调用)。
如果您确实需要更改原始数组,请使用.map()
。
例如:
posts = posts.map(post => {
post.comments = post.comments.length;
return post
});
这将转换原始数组并返回您想要的值。