Ok, pensé que lo había resuelto, pero supongo que estaba equivocado. Anteriormente publiqué el problema en el que debido a que javascript se copia un objeto como referencia del original, los cambios en el objeto original también se reflejarán en la copia. Entonces, según las recomendaciones de usar
const originalData = {...docid[0][0].Record} // or const originalData = Object.assign({}, docid[0][0].Record)revisé mi código para usarlos sin mucha suerte. Mi código ahora se ve así ...
// Assign the Data from query // const originalData = {...docid[0][0].Record} const originalData = Object.assign({}, docid[0][0].Record) // Delete the History & DocId Object from Data Object delete originalData['History'] delete originalData['DocId']y si imprimo en console.log (originalData), los datos son correctos. Ahora, en mi código, actualizo algunos datos y tengo una función que compara los datos para crear un archivo de diferencias, por eso necesito los datos originales.
Después de ejecutar este código a continuación, que toma mis nuevos datos y los mapea, elimina lo indefinido, etc.
// Mailing Address let MailingAddrObj = update.mailingAddress Object.keys(MailingAddrObj).forEach(key => MailingAddrObj[key] === undefined && delete MailingAddrObj[key]) let MailingAddress = _.extend(docid[0][0].Record.mailingAddress, MailingAddrObj)pero por alguna razón, el último comando también modificó mis datos originales, lo que pensé que era una copia profunda y eso no debería suceder. Entonces, si imprimo los datos originales después de este código, refleja los nuevos datos en el objeto MailingAddress.
Entonces, ¿qué me estoy perdiendo aquí o qué está mal?
Object.assign no funcionará para la clonación profunda. usar así
const originalData = JSON.parse(JSON.stringify(docid[0][0].Record));Después de buscar un poco más, encontré una solución basada en lodash que me parece más limpia, especialmente porque ya uso lodash en mi código.
const _ = require('lodash'); var obj = [{ x: 1 }, {y: 2}]; // Deep copy var deepCopy = _.cloneDeep(obj);