This is a lodash mixin for getting a JSON object that rappresent the value variation of a JSON respect another.
npm install lodash-mixin-diff-value
const _ = require('lodash');
const differenceValues = require('lodash-mixin-diff-value');
_.mixin({ differenceValues });
const diff = _.differenceValues(editedJson, originalJson[, options]);
options
is a json with the fields:
Key | Values | Default | Description |
---|---|---|---|
extract | [only-add, only-remove, only-changed, only-add-change] |
only-add-change |
Described below |
dateCheck | true or false |
true |
For performance: deactivate the date object and string evaluation |
dateFormatIn | date-fns formats | yyyy-MM-dd'T'HH:mm:ss.SSS'Z' |
The format to use to evaluate string during date checking |
dateFormatOut | date-fns formats | yyyy-MM-dd'T'HH:mm:ss.SSS'Z' |
The format to use to evaluate date-string comparison |
only-add
: will return only field that occurs ineditedJson
and not inoriginalJson
only-remove
: will return only field that not occurs ineditedJson
and are inoriginalJson
only-changed
: will return only field that occurs ineditedJson
andoriginalJson
tooonly-add-change
: likeonly-add
+only-changed
If true
: activate deep controls for the date object and strings. The input are evaluated with the options.dateFormatIn
format and compared using the options.dateFormatOut
format.
This will enable you to read corectly a date in a format like options.dateFormatIn: yyyy-MM-dd
but consider the date changed only if the year and month change options.dateFormatOut: yyyy-MM
.
If false
: only Date objects are evaluated as date.toISOString()
for comparison.
This format let you to execute the diff value on portion of the date string not only on the complete date. This cost in performance because all the string will be checked if match with this format.
For run the tests simply execute:
npm test
See test for more examples.
const oldObj = {
a: 'b',
arr: [1, 2, 3, { a: 111 }],
more: 'more',
intarr: [1, 2, 3, 4],
newarr: [{ k: 'XXX' }, { k: 'val' }, 3333],
arrtwo: [{ k: 'nod' }, { k: 'val' }],
json: { a: 'a', b: 'b', c: 'c', d: { deep: [12, 3, { mode: 'deep' }] } },
o: { sub: 'json' },
};
const newObj = {
a: 'b',
arr: [1, 22, 3, { a: 111, q: 'none' }],
intarr: [1, 2, 3, 4],
newarr: [{ k: 'XXX' }, { k: 'val' }, 3333],
arrtwo: [{ k: 'XXX' }, { k: 'val' }, 3333],
json: { a: 'a', b: 'b', c: 'c', d: { deep: [12, 333, { mode: 'deeper' }] } },
o: { sub: 'json' },
};
const out = _.differenceValues(newObj, oldObj);
// Will print out:
{
"arr": [
22,
{
"q": "none"
}
],
"arrtwo": [
{
"k": "XXX"
},
3333
],
"json": {
"d": {
"deep": [
333,
{
"mode": "deeper"
}
]
}
}
}
- JSDoc
- More test and validity-check
- Managen functions
Copyright Manuel Spigolon, Licensed under MIT.