2.0.1 • Published 7 years ago

equiv v2.0.1

Weekly downloads
1
License
MIT
Repository
-
Last release
7 years ago

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