Skip to content
/ equiv Public

Utility for determining if two values are equivalent

Notifications You must be signed in to change notification settings

jackgeek/equiv

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

equiv

A small JavaScript utility for deep comparing two javascript values by value.

Installation

via npm

$ npm install equiv --save

Usage

equiv(valueA, valueB, [substituteFunc])

Examples

equiv(16384, 16384) // true
equiv(false, false) // true
equiv(null, null) // true
equiv(undefined, undefined) // true
equiv(NaN, NaN) // false
equiv([1, 2, 3], [1, 2, 3]) // true
equiv({ a: 1, b: 2 }, { b: 2, a: 1 }) // true
equiv({ a: [ { b: 1 } ] }, { a: [ { b: 1 } ] }) // true

Substitute function

A function may be provided to modify values before they are compared. The function receives the value as the first parameter and must return the substituted value.

Substitute example

equiv('foo', 'bar', () => 'foo') // true
equiv(true, 'true', (value) => typeof value !== 'string' ? value.toString() : value) // true

Currying the substitute function

The substitute function may be curried by passing it to equiv as the first and only parameter

function substituteStrings(a) {
  // NaN check
  if (a !== a) {
    return a;
  }
  if (a === void 0) return 'undefined';
  if (a === null) return 'null';
  if (typeof a === 'object') {
    return a;
  }
  return a.toString();
}

const stringEquiv = equiv(substituteStrings);

stringEquiv(16384, '16384') // true
stringEquiv(false, 'false') // true
stringEquiv(null, 'null') // true
stringEquiv(undefined, 'undefined') // true
stringEquiv(NaN, NaN) // false
stringEquiv([1, 2, 3], ['1', '2', '3']) // true
stringEquiv({ a: 1, b: 2 }, { b: '2', a: '1' }) // true
stringEquiv({ a: [ { b: 1 } ] }, { a: [ { b: '1' } ] }) // true

License

MIT

About

Utility for determining if two values are equivalent

Resources

Stars

Watchers

Forks

Packages

No packages published