为什么我不能修改原始数组?

时间:2019-08-14 20:48:56

标签: javascript node.js express

我试图通过评论数来更改每个帖子中的评论,但是当我输入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}});

});

1 个答案:

答案 0 :(得分:1)

来自MDN

forEach()不会使调用它的数组发生突变(尽管回调可以被调用)。

如果您确实需要更改原始数组,请使用.map()

例如:

posts = posts.map(post => {
post.comments = post.comments.length;
return post
}); 

这将转换原始数组并返回您想要的值。