我如何将对象属性复制到另一个对象?
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容器里?