Javascript Lodash相当于JSON.parse(JSON.stringify())
我当前正在克隆具有以下内容的对象:Javascript Lodash相当于JSON.parse(JSON.stringify()),javascript,node.js,lodash,Javascript,Node.js,Lodash,我当前正在克隆具有以下内容的对象: var copy = JSON.parse(JSON.stringify(original)); 当我尝试lodash时,似乎推荐的方法是cloneDeep(),但这对我来说太糟糕了。我的对象部分由Mongoose查询的结果组成,这可能是导致这种情况的原因 原件: template: 'email/receipt.swig', templateVars: { code: '299137819', 需要添加lodash: template: 'emai
var copy = JSON.parse(JSON.stringify(original));
当我尝试lodash时,似乎推荐的方法是cloneDeep(),但这对我来说太糟糕了。我的对象部分由Mongoose查询的结果组成,这可能是导致这种情况的原因
原件:
template: 'email/receipt.swig',
templateVars: {
code: '299137819',
需要添加lodash:
template: 'email/receipt.swig',
templateVars: {
'$__': {
strictMode: true,
selected: undefined,
shardval: undefined,
saveError: undefined,
validationError: undefined,
adhocPaths: undefined,
removing: undefined,
inserting: true,
version: undefined,
getters: [Object],
_id: undefined,
populate: undefined,
populated: [Object],
wasPopulated: false,
scope: [Circular],
activePaths: [Object],
ownerDocument: undefined,
fullPath: undefined
},
isNew: false,
errors: undefined,
_maxListeners: 0,
_events: { save: [Object], isNew: [Object] },
_doc: {
code: '299137819'
这里发生了什么?这显然是蒙哥的东西,但为什么要改革?没有办法用lodash制作一份精确的副本吗?并不是说我当前的方法很痛苦——只是想理解为什么人们说cloneDeep是等效的。从Mongoose返回的对象并不像您从DB中期望的那样是原始键值,但它们内置了许多其他功能。最终,它会复制所有东西,包括函数和其他你可能不想要的东西
JSON.stringify
以及.toJSON
都将起作用
因此,事实上它们是不等价的,因为您可以重新定义JSON序列化行为,而JSON无论如何都不会序列化函数。我知道它可能会复制其他内容,但结构完全不同。对于ex
orig.templateVars.code
现在是未定义的,这使得这种副本毫无用处。为什么要重组?那么lodash就没有办法维护结构了吗?与其进行深度克隆,不如直接使用.toObject()从Mongoose文档创建简单的可编辑对象。