I am currently cloning an object with:
var copy = JSON.parse(JSON.stringify(original));
When I try lodash - it seems the recommended way is cloneDeep() but that makes a total mess for me. My object is partially made up of the result of a Mongoose query which may be what is causing this.
Original:
template: 'email/receipt.swig',
templateVars: {
code: '299137819',
Cloneed with 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'
What is happening here? This is clearly Mongo stuff but why the reformat? Is there no way to make an exact copy with lodash? Not that my current method is a pain - just trying to understand why people say cloneDeep is the equivalent.
Objects returned from Mongoose are not raw key-values like you might expect from the DB, but they have a lot of other functionality build in. Ultimately, cloneDeep
does this, which ends up copying everything including functions and other stuff you may not want.
JSON.stringify
as well as .toJSON
will work because of the toJSON
behavior.
So in fact they are not equivalent because you can redefine JSON serialization behavior and JSON never serializes functions anyway.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With