crud-object-diff
v2.3.6
Published
Helper utilities to compare objects or arrays for obtaining created, updated, & deleted values.
Downloads
3,120
Maintainers
Keywords
Readme
CRUD Compare - JS State Comparison Helper
This is a very ✌ lightweight and ⚡️ fast library for comparing objects, arrays, and arrays of objects to get the Created, Updated, & Deleted values (helpful for state comparisons).
Install
npm install crud-object-diff
Usage
Comparing Arrays of Objects
Method:
compareObjectVals
Parameters:
toCompareVals: [Object[], Object[]], key?: string|string[]
Returns:
{ createdVals: Object[]|null, updatedVals: Object[]|null, deletedVals: Object[]|null }
Provides: Created, Updated, and Deleted values (via separate arrays) from comparing two arrays of objects.
- It is recommended to provide a related unique key (i.e. primary key on data) between the objects to be compared using the compareObjectVals function. A single or composite (several keys) key can be provided in an array for relatedObjectKey.
- Without giving a related key, the algorithm traverses every single key in each provided object looking for when a single object key is matched along with a value with equivalence between the matching found key.
- The values of the returned created, updated, or deleted arrays from compareObjectVals / compareArrayVals functions will be null if they do not exist.
const originalArrayOfObjects = [{ one: 1, two: 2 }, { test: undefined }];
const newArrayOfObjects = [{ one: 1, two: null }, { one: 22, five: 5 }]
const relatedObjectKey = 'one';
const { createdVals, updatedVals, deletedVals } = compareObjectVals(
[originalArrayOfObjects, newArrayOfObjects],
relatedObjectKey // Not required, but suggested for speed.
);
console.log(createdVals); // [{ one: 22, five: 5 }]
console.log(updatedVals); // [{ one: 1, two: null }]
console.log(deletedVals); // [{ test: undefined }]
See further examples here.
Comparing Arrays
Method:
compareArrayVals
Parameters:
toCompareVals: [any[], any[]]
Returns:
{ createdVals: any[] | null, deletedVals: any[] | null }
Provides: Created and Deleted values between two arrays of primitives (strings, numbers, etc.) using the compareArrayVals function.
const originalArrayItem = [1, 2, 'five', true, 33];
const updatedArrayItem = [1, 'seven', true, 33];
const { createdVals, deletedVals } = compareArrayVals(
[ originalArrayItem, updatedArrayItem ]
);
console.log(createdVals); // ['seven']
console.log(deletedVals); // [2, 'five']
See further examples here.
Comparing Two Arrays or Two Objects for Equivalence via helper functions
isEqualObject(a: Object, b: Object): Boolean
isEqualArray(a: any[], b: any[]): Boolean
- Deep Object and Array comparing helper functions are provided for quick equivalence checks using the isEqualObject or isEqualArray functions. *Note: Object.is() is used for primative data type comparison checks.
const obj1 = {a: 1, b: 2, c: {'one': 1, 'two': [{ 2: 1, 44:3 }]}};
const obj2 = {a: 1, b: 2, c: {'one': 1, 'two': [{ 2: 1, 44:3 }]}};
const areObjectsEquivalent = isEqualObject(obj1, obj2); // true
const array1 = [Symbol('33')];
const array2 = ['one', 'two'];
const areArraysEquivalent = isEqualArray(array1, array2); // false
See further examples here
To support, Please if you used / like this library!
Todo
- [ ] Add more tests for edge cases.
- [ ] Update prettier and fix the linter.
- [ ] Get the Google Closure Compiler working w/ the advanced compile setting, and fix types in the code to reach ~99%.
Contributing
Please see the contributing guidelines here for further information. All contributions are appreciated, even if they are just comments from issues.
License
MIT