首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >es6传播算子-猫鼬结果拷贝

es6传播算子-猫鼬结果拷贝
EN

Stack Overflow用户
提问于 2017-12-28 21:17:22
回答 3查看 11.2K关注 0票数 44

我正在用mongo和mongoose开发一个快捷的js。

我想在Javascript es6中创建一个对象,该对象由几个变量和一个猫鼬请求的结果组成,并希望使用es6扩展操作符:

代码语言:javascript
复制
MyModel.findOne({_id: id}, (error, result) => {
   if (!error) {
      const newObject = {...result, toto: "toto"};
   }
});

问题是,将扩展运算符应用于结果以一种广泛的方式对其进行转换:

代码语言:javascript
复制
newObject: {
   $__: {
      $options: true,
      activePaths: {...},
      emitter: {...},
      getters: {...},
      ...
      _id: "edh5684dezd..."
   }
   $init: true,
   isNew: false,
   toto: "toto",
   _doc: {
      _id: "edh5684dezd...",
      oneFieldOfMyModel: "tata",
      anotherFieldOfMyModel: 42,
      ...
   }
}

我有点理解,对象结果被猫鼬所丰富,以允许与它进行特定的交互,但是在这样做之前,当我console.log时,它描述的是一个简单的对象,而不是所有这些东西。

我不想通过做...result._doc来作弊,因为我抽象了这个部分,而且它不适合这样做。也许有一种方法可以复制一个对象,而不需要任何东西。

谢谢您抽时间见我。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-12-28 21:26:51

您可以使用Mongoose Document.toObject()方法。它将返回从数据库中获取的底层纯JavaScript对象。

代码语言:javascript
复制
const newObject = {...result.toObject(), toto: "toto"};

您可以阅读有关.toObject()方法这里的更多信息。

票数 104
EN

Stack Overflow用户

发布于 2022-01-12 10:08:16

对某些人来说,这是有帮助的:

代码语言:javascript
复制
const newObject = {
    ...JSON.parse(JSON.stringify(result)),
    toto: "toto"
};

但是,如果在架构中使用日期、函数、未定义的、regExp或无穷大,则会受到限制

票数 1
EN

Stack Overflow用户

发布于 2022-02-14 12:23:33

我遇到了同样的问题,除了前面的答案之外,我还找到了一些替代方案。

选项1 Object.assign()

The Object.assign() method copies all enumerable own properties from one or more source objects to a target object. It returns the modified target object.

示例:

代码语言:javascript
复制
Object.assign(result, {toto: "toto");

选项2 Document.prototype.set()

Sets the value of a path, or many paths.

代码语言:javascript
复制
doc.set("toto", "toto")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48014504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档