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 | :x: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | | dequal/lite | :+1: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :x: | :x: | :x: | :x: |

Note: Table scrolls horizontally!

Usage

```js 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:

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