【问题标题】:Cannot add property to Object, how to fix?无法向对象添加属性,如何解决?
【发布时间】:2020-12-24 15:35:03
【问题描述】:

我正在尝试将属性添加到 Javascript 中的嵌套对象;但是,当我设置属性名称和值时,该属性无法持久化。

populated_post.comments[i].comment.end = true
console.log(typeof(populated_post));
console.log(typeof(populated_post.comments[i].comment));
console.log(populated_post.comments[i].comment);

控制台:

object
object
{
  _id: 5f517998dce977a23c10b79a,
  post: 5f51718ac691e8a15f28d7de,
  sender: {
    _id: 5f5170e83e91eaa1580715a0,
    username: 'Patrick',
    password: 'foobar',
    bio: 'Hi, my name is Patrick',
    items: [],
    inbox: [],
    followers: [],
    following: [],
    contacts: [ [Object] ],
    __v: 0,
    profile_photo: '80becce309e4c6b02a0e9538559ed932'
  },
  date: 2020-09-03T23:17:44.028Z,
  message: '!',
  replies: [
    {
      comment_id: 5f5261aa5db43fa8d20dd668
    }
  ],
  __v: 0
}

据我所知,我正确设置了属性。我在整个应用程序中多次执行此操作,但由于某种原因它在这里不起作用。有什么想法吗?

【问题讨论】:

  • 你也可以试试console.log(populated_post.comments[i].comment.end);吗?
  • @Abhilash 它就在那里。控制台输出一个布尔值。当我向客户发送populated_post 时,它不存在。
  • 对象有可能被冻结。 const X = Object.freeze({ firstProp: 1, secondProp: "Hi" }); X.third = true; 这将默默地阻止属性的变化。
  • @Abhilash 我知道它没有被冻结,因为我可以改变属性。我只是无法添加它们。
  • 看起来响应有一个自定义的 toString()。 console.log 的 JSON 中没有这些道具

标签: javascript node.js


【解决方案1】:

该对象是一个猫鼬对象。 Mongoose 对象对其属性有限制,这会阻止添加新属性。解决方案是通过 MongooseObject.toObject() 或 mongoose lean() 函数将 Object 转换为普通的 JS 对象。在这里回答: Can not add additional element to (mongoose) object

【讨论】:

    猜你喜欢
    • 2016-04-05
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-19
    相关资源
    最近更新 更多