cc

crud-compare

Compare JavaScript Objects, Array of Objects, and/or Array of Primitives to get created, modified, and deleted values.

Showing:

Popularity

Downloads/wk

19

GitHub Stars

10

Maintenance

Last Commit

1mo ago

Contributors

2

Package

Dependencies

0

Size (min+gzip)

1.0KB

License

MIT

Type Definitions

Tree-Shakeable

No?

Categories

Deprecated!
Migrated to new name w/ further updates: crud-object-diff

Readme

CRUD Compare - JS State Comparison Helper

npm npm bundle size Coverage GitHub Dependencies PRs Welcome CircleCI

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

Rate & Review

Great Documentation0
Easy to Use0
Performant0
Highly Customizable0
Bleeding Edge0
Responsive Maintainers0
Poor Documentation0
Hard to Use0
Slow0
Buggy0
Abandoned0
Unwelcoming Community0
100