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文档创建简单的可编辑对象。