5

假设我的帖子数组中的每个帖子都有两个属性名称和编号。所以它就像

var posts = [{name:"hey", number: 1}, {name:"foo", number:"2"}]

Javascript 允许我在 foreach 循环中更改这些属性,如下所示:

posts.forEach(function(post){
    post.name = "bar"
});

我的数组变成:

var posts = [{name:"bar", number: 1}, {name:"bar", number:"2"}]

但它不允许我添加一个新属性,如:

posts.forEach(function(post){
    post.adress = "bar"
});

我的对象保持不变。有没有办法在 javascipt 的 foreach 循环中添加属性

编辑:

这是在回调中使用猫鼬发生的..

  Post.pagination(options, function(err, posts) {
    if (err) console.log(err)
    posts.forEach(function(post){
      post.votetype = 1;
    });
    console.log(posts);
    res.send({ posts : posts  })
  })

未添加此 votetype 属性后

4

1 回答 1

12

问题是从 Mongoose 返回的数据是不可变的。下面的代码未经测试,但应该为您提供有关如何使数据可变并对其进行修改的提示。

关键是调用toObject()您希望修改的 Mongoose 文档对象。

Post.pagination(options, function(err, posts) {
  if (err) console.log(err);

  var resultPosts = posts.map(function(post) {
    var tmpPost = post.toObject();

    // Add properties...
    tmpPost.votetype = 1;

    return tmpPost;
  });

  console.log(resultPosts);
  res.send({ posts : resultPosts  });
});
于 2013-07-31T01:15:33.017 回答