javascript - 相当于 JSON.parse(JSON.stringify()) 的 Lodash

标签 javascript node.js lodash

我目前正在克隆一个对象:

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'

这里发生了什么?这显然是 Mongo 的东西,但为什么要重新格式化?有没有办法用 lodash 制作一个精确的副本?并不是说我当前的方法很痛苦 - 只是想了解为什么人们说 cloneDeep 是等效的。

最佳答案

从 Mongoose 返回的对象不是您可能期望从数据库中获得的原始键值,但它们内置了许多其他功能。最终,cloneDeep does this ,最终会复制所有内容,包括您可能不需要的功能和其他内容。

JSON.stringify.toJSON 都可以使用 because of the toJSON行为。

所以实际上它们并不等价,因为您可以重新定义 JSON 序列化行为,而 JSON 从不无论如何都不会序列化函数。

关于javascript - 相当于 JSON.parse(JSON.stringify()) 的 Lodash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25411826/

相关文章:

javascript - 检查对象是否为空且具有未定义的属性

node.js - 当我创建一个带有引用另一个 Mongoose 对象的位置的模式时,如何防止 Mongoose 创建 id?

javascript - Cypress :找不到模块:错误:无法解析'cypress/types/lodash

javascript - 使用 javascript/nodejs 分割 url 并存储在数组、对象或字符串中

node.js - Nodejs Lodash map 同步请求

Javascript - 如何删除所有事件类,除非被单击的元素已经具有事件类

javascript - Flot:整个屏幕上标签颜色一致,并带有多个堆叠条形图

javascript - 在 Internet Explorer 上加载锁定

javascript - JavaScript AWS S3 SDK 是否允许在一个进程中连接到多个 AWS 配置文件?

node.js - AzureAD JWT token 受众声明前缀使 JWT token 无效