我如何将对象属性复制到另一个对象?

Posted

技术标签:

【中文标题】我如何将对象属性复制到另一个对象?【英文标题】:How i can copy object property to another object? 【发布时间】:2017-05-08 04:13:36 【问题描述】:

我对 JS、mongoDB 和 mongoose 还是很陌生。

我想尝试将一些文档字段复制到另一个文档。 之后我想删除原始文档。

这是我的 mongoDB 集合:

    [
// twitter account

 "_id"     : "585bbba59659501d68f997ec", 
  "logIn"   : "twitter" , 
  "pollIds" :  "local" : [ ] , "facebook" : [ ] , "twitter" : [ ] ,
  "twitter" :  "username"      : "xxxxx" , 
                "displayName"   : "xxxx yyyyy" , 
                "token"         : "" , //place for copied twitter token
                "id"            : "99999999999999999" ,
  "__v" : 0,

  //facebook account connected with twitter and local

 "_id"     : "585bbba99659501d68f997ed",
  "logIn"   : "facebook" , 
  "pollIds" :  "local" : [ ] , "facebook" : [ ] , "twitter" : [ ] , 

  "twitter" :  "username"      : "xxxxx" ,
                "displayName"   : "xxxx yyyyy" , 
                "token"         : "tokentokentokentoken" , //token what i want to copy 
                "id"            : "99999999999999999" , 
                "dbId"          : "585bbba59659501d68f997ec" ,

  "facebook":  "email"         : "xx@xx.com" ,
                 "displayName"  : "xxx  yyy" , 
                 "token"        : "facebooktoken" , 
                 "id"           : "8888888888888888" , 

  "local"   :   "password"     : "local user password" , 
                 "email"        : "ggg@ggg.com" , //email what i want to copy
                 "dbId"         : "585bbbc29659501d68f997ee",
  "__v" : 0

//local account

 "_id"     : "585bbbc29659501d68f997ee", 
  "logIn"   : "local" , 
  "pollIds" :  "local" : [ ] , "facebook" : [ ] , "twitter" : [ ] ,
  "local"   :  "password"  : "local password" ,
                "email"     : "" , place for copied local email
  "__v" : 0

]

我试图实现的是将 TWITTER 和 LOCAL 帐户与 FACEBOOK 帐户断开连接。这是我尝试这样做的方法:

    从 FACEBOOK 帐户复制 TWITTER 令牌到 TWITTER 帐户 从 FACEBOOK 帐户复制 LOCAL 电子邮件到 LOCAL 帐户

    从 FACEBOOK 帐户中删除 TWITTER 和 LOCAL 帐户分配 他们未定义

    //本地=未定义// // 推特 = 未定义 //

我的问题是:删除 LOCAL 和 TWITTER 帐户后,复制的字段也会消失。我想我只是复制了它的参考而不是它的价值。如果是这种情况,我该怎么做?

我希望我的问题看起来并不混乱。这是我在这里的第一篇文章。 谢谢你的回答。

【问题讨论】:

This post 可以帮助你:var clone = JSON.parse(JSON.stringify(obj)); 【参考方案1】:

因此,Node 中的对象的问题在于,当您“复制”它们(即 var x = y)时,您实际上是在创建指向原始对象的指针。您可能想要做的是:

var newObj = ;
Object.assign(newObj, originalObj);
delete originalObj['somekey'];

所以它的作用是获取原始对象,将其深拷贝到一个新对象中(2 个单独的内存位置),然后最后我使用 delete 删除键(基本上将它们设置为未定义) .

更多关于 Object.assign 的信息请参考:https://developer.mozilla.org/en-US/docs/Web/javascript/Reference/Global_Objects/Object/assign

【讨论】:

尤其是您发送的链接非常有帮助。谢谢。

以上是关于我如何将对象属性复制到另一个对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何将一个对象的每个键重新映射到另一个对象的值? [复制]

Microsoft Access - 将对象属性复制到同一类型的另一个对象

Java。如何将一个LinkedList里的元素全部复制到另一LinkedList容器里?

将数据库对象复制到另一个-django

如何在 Android 上将对象从一个活动传递到另一个活动? [复制]

如何在 C++ 中将一个对象从一个向量复制到另一个向量?