Nascent Plasticine Materialist
    Have ideas to improve npm?Join in the discussion! »

    dequal
    TypeScript icon, indicating that this package has built-in type declarations

    2.0.2 • Public • Published

    dequal CI

    A tiny (304B to 489B) utility to check for deep equality

    This module supports comparison of all types, including Function, RegExp, Date, Set, Map, TypedArrays, DataView, null, undefined, and NaN values. Complex values (eg, Objects, Arrays, Sets, Maps, etc) are traversed recursively.

    Important:

    • key order within Objects does not matter
    • value order within Arrays does matter
    • values within Sets and Maps use value equality
    • keys within Maps use value equality

    Install

    $ npm install --save dequal
    

    Modes

    There are two "versions" of dequal available:

    dequal

    Size (gzip): 489 bytes
    Availability: CommonJS, ES Module, UMD

    dequal/lite

    Size (gzip): 304 bytes
    Availability: CommonJS, ES Module

    IE9+ Number String Date RegExp Object Array Class Set Map ArrayBuffer TypedArray DataView
    dequal
    dequal/lite 👍

    Note: Table scrolls horizontally!

    Usage

    import { dequal } from 'dequal';
     
    dequal(1, 1); //=> true
    dequal({}, {}); //=> true
    dequal('foo', 'foo'); //=> true
    dequal([1, 2, 3], [1, 2, 3]); //=> true
    dequal(dequal, dequal); //=> true
    dequal(/foo/, /foo/); //=> true
    dequal(null, null); //=> true
    dequal(NaN, NaN); //=> true
    dequal([], []); //=> true
    dequal(
      [{ a:1 }, [{ b:{ c:[1] } }]],
      [{ a:1 }, [{ b:{ c:[1] } }]]
    ); //=> true
     
    dequal(1, '1'); //=> false
    dequal(null, undefined); //=> false
    dequal({ a:1, b:[2,3] }, { a:1, b:[2,5] }); //=> false
    dequal(/foo/i, /bar/g); //=> false

    API

    dequal(foo, bar)

    Returns: Boolean

    Both foo and bar can be of any type.
    A Boolean is returned indicating if the two were deeply equal.

    Benchmarks

    Running Node v10.13.0

    The benchmarks can be found in the /bench directory. They are separated into two categories:

    • basic – compares an object comprised of String, Number, Date, Array, and Object values.
    • complex – like basic, but adds RegExp, Map, Set, and Uint8Array values.

    Note: Only candidates that pass validation step(s) are listed.
    For example, fast-deep-equal/es6 handles Set and Map values, but uses referential equality while those listed use value equality.

    Load times:
      assert             0.109ms
      util               0.006ms
      fast-deep-equal    0.479ms
      lodash/isequal    22.826ms
      nano-equal         0.417ms
      dequal             0.396ms
      dequal/lite        0.264ms
    
    Benchmark :: basic
      assert.deepStrictEqual  x    325,262 ops/sec ±0.57% (94 runs sampled)
      util.isDeepStrictEqual  x    318,812 ops/sec ±0.87% (94 runs sampled)
      fast-deep-equal         x  1,332,393 ops/sec ±0.36% (93 runs sampled)
      lodash.isEqual          x    269,129 ops/sec ±0.59% (95 runs sampled)
      nano-equal              x  1,122,053 ops/sec ±0.36% (96 runs sampled)
      dequal/lite             x  1,700,972 ops/sec ±0.31% (94 runs sampled)
      dequal                  x  1,698,972 ops/sec ±0.63% (97 runs sampled)
    
    Benchmark :: complex
      assert.deepStrictEqual  x    124,518 ops/sec ±0.64% (96 runs sampled)
      util.isDeepStrictEqual  x    125,113 ops/sec ±0.24% (96 runs sampled)
      lodash.isEqual          x     58,677 ops/sec ±0.49% (96 runs sampled)
      dequal                  x    345,386 ops/sec ±0.27% (96 runs sampled)
    

    License

    MIT © Luke Edwards

    Install

    npm i dequal

    DownloadsWeekly Downloads

    600,398

    Version

    2.0.2

    License

    MIT

    Unpacked Size

    14.2 kB

    Total Files

    11

    Last publish

    Collaborators

    • avatar