deep-object-diff-mod
❄️
Deep diff two JavaScript Objects
A small library that can deep diff two JavaScript Objects, including nested structures of arrays and objects. This library is a slight mod of Matt Phillips' deep-object-diff package, the only difference being that it will return a 'REMOVED' string instead of undefined in place where objects have been removed from an updated object's array of objects. The use-case for this is for Mongo Database Logging - undefined key-values do not save, meaning logs don't show key-values that have been removed from an object. This solution remedies that issue.
Installation
yarn add deep-object-diff-mod
npm i --save deep-object-diff-mod
Functions available:
-
diff(originalObj, updatedObj)
returns the difference of the original and updated objects -
addedDiff(original, updatedObj)
returns only the values added to the updated object -
deletedDiff(original, updatedObj)
returns only the values deleted in the updated object -
updatedDiff(original, updatedObj)
returns only the values that have been changed in the updated object -
detailedDiff(original, updatedObj)
returns an object with the added, deleted and updated differences
Importing
ES6 / Babel:
;
ES5:
const diff addedDiff deletedDiff detailedDiff updatedDiff = ;// ORconst diff = diff;const addedDiff = addedDiff;const deletedDiff = deletedDiff;const detailedDiff = detailedDiff;const updatedDiff = updatedDiff;
Usage:
diff
:
const lhs = foo: bar: a: 'a' 'b' b: 2 c: 'x' 'y' e: 100 // deleted buzz: 'world'; const rhs = foo: bar: a: 'a' // index 1 ('b') deleted b: 2 // unchanged c: 'x' 'y' 'z' // 'z' added d: 'Hello, world!' // added buzz: 'fizz' // updated; console; // =>/*{ foo: { bar: { a: { '1': 'REMOVED' }, c: { '2': 'z' }, d: 'Hello, world!', e: 'REMOVED' } }, buzz: 'fizz'}*/
addedDiff
:
const lhs = foo: bar: a: 'a' 'b' b: 2 c: 'x' 'y' e: 100 // deleted buzz: 'world'; const rhs = foo: bar: a: 'a' // index 1 ('b') deleted b: 2 // unchanged c: 'x' 'y' 'z' // 'z' added d: 'Hello, world!' // added buzz: 'fizz' // updated; console; /*{ foo: { bar: { c: { '2': 'z' }, d: 'Hello, world!' } }}*/
deletedDiff
:
const lhs = foo: bar: a: 'a' 'b' b: 2 c: 'x' 'y' e: 100 // deleted buzz: 'world'; const rhs = foo: bar: a: 'a' // index 1 ('b') deleted b: 2 // unchanged c: 'x' 'y' 'z' // 'z' added d: 'Hello, world!' // added buzz: 'fizz' // updated; console; /*{ foo: { bar: { a: { '1': 'REMOVED' }, e: 'REMOVED' } }}*/
updatedDiff
:
const lhs = foo: bar: a: 'a' 'b' b: 2 c: 'x' 'y' e: 100 // deleted buzz: 'world'; const rhs = foo: bar: a: 'a' // index 1 ('b') deleted b: 2 // unchanged c: 'x' 'y' 'z' // 'z' added d: 'Hello, world!' // added buzz: 'fizz' // updated; console; /*{ buzz: 'fizz'}*/
detailedDiff
:
const lhs = foo: bar: a: 'a' 'b' b: 2 c: 'x' 'y' e: 100 // deleted buzz: 'world'; const rhs = foo: bar: a: 'a' // index 1 ('b') deleted b: 2 // unchanged c: 'x' 'y' 'z' // 'z' added d: 'Hello, world!' // added buzz: 'fizz' // updated; console; /*{ added: { foo: { bar: { c: { '2': 'z' }, d: 'Hello, world!' } } }, deleted: { foo: { bar: { a: { '1': 'REMOVED' }, e: 'REMOVED' } } }, updated: { buzz: 'fizz' }}*/
License
MIT