What is fast-deep-equal?
The fast-deep-equal package is a fast deep equality comparison library. It allows developers to check if two objects, arrays, or values are deeply equal to each other, meaning that their structure and nested values are identical.
What are fast-deep-equal's main functionalities?
Deep equality check for objects
This feature allows you to compare two objects to determine if they are deeply equal.
const equal = require('fast-deep-equal');
const obj1 = { a: 1, b: { c: 2 } };
const obj2 = { a: 1, b: { c: 2 } };
console.log(equal(obj1, obj2)); // true
Deep equality check for arrays
This feature allows you to compare two arrays to determine if they are deeply equal, including nested arrays.
const equal = require('fast-deep-equal');
const arr1 = [1, 2, [3, 4]];
const arr2 = [1, 2, [3, 4]];
console.log(equal(arr1, arr2)); // true
Deep equality check for values
This feature allows you to compare two primitive values to determine if they are equal.
const equal = require('fast-deep-equal');
const val1 = 'value';
const val2 = 'value';
console.log(equal(val1, val2)); // true
Other packages similar to fast-deep-equal
lodash.isequal
Lodash's isEqual function is a popular utility for performing deep equality checks. It is more feature-rich than fast-deep-equal, handling more edge cases and supporting customizer functions, but it may be slower for simple comparisons due to its comprehensive approach.
deep-equal
The deep-equal package provides a similar deep equality checking functionality. It is less performant than fast-deep-equal but offers a strict comparison mode that uses the === operator for equality checks.
nano-equal
Nano-equal is a minimalistic library for deep equality checks. It is designed to be small and fast, similar to fast-deep-equal, but may not handle as many edge cases.
fast-deep-equal
The fastest deep equal with ES6 Map, Set and Typed arrays support.
Install
npm install fast-deep-equal
Features
- ES5 compatible
- works in node.js (8+) and browsers (IE9+)
- checks equality of Date and RegExp objects by value.
ES6 equal (require('fast-deep-equal/es6')
) also supports:
Usage
var equal = require('fast-deep-equal');
console.log(equal({foo: 'bar'}, {foo: 'bar'}));
To support ES6 Maps, Sets and Typed arrays equality use:
var equal = require('fast-deep-equal/es6');
console.log(equal(Int16Array([1, 2]), Int16Array([1, 2])));
To use with React (avoiding the traversal of React elements' _owner
property that contains circular references and is not needed when
comparing the elements - borrowed from react-fast-compare):
var equal = require('fast-deep-equal/react');
var equal = require('fast-deep-equal/es6/react');
Performance benchmark
Node.js v12.6.0:
fast-deep-equal x 261,950 ops/sec ±0.52% (89 runs sampled)
fast-deep-equal/es6 x 212,991 ops/sec ±0.34% (92 runs sampled)
fast-equals x 230,957 ops/sec ±0.83% (85 runs sampled)
nano-equal x 187,995 ops/sec ±0.53% (88 runs sampled)
shallow-equal-fuzzy x 138,302 ops/sec ±0.49% (90 runs sampled)
underscore.isEqual x 74,423 ops/sec ±0.38% (89 runs sampled)
lodash.isEqual x 36,637 ops/sec ±0.72% (90 runs sampled)
deep-equal x 2,310 ops/sec ±0.37% (90 runs sampled)
deep-eql x 35,312 ops/sec ±0.67% (91 runs sampled)
ramda.equals x 12,054 ops/sec ±0.40% (91 runs sampled)
util.isDeepStrictEqual x 46,440 ops/sec ±0.43% (90 runs sampled)
assert.deepStrictEqual x 456 ops/sec ±0.71% (88 runs sampled)
The fastest is fast-deep-equal
To run benchmark (requires node.js 6+):
npm run benchmark
Please note: this benchmark runs against the available test cases. To choose the most performant library for your application, it is recommended to benchmark against your data and to NOT expect this benchmark to reflect the performance difference in your application.
Enterprise support
fast-deep-equal package is a part of Tidelift enterprise subscription - it provides a centralised commercial support to open-source software users, in addition to the support provided by software maintainers.
Security contact
To report a security vulnerability, please use the
Tidelift security contact.
Tidelift will coordinate the fix and disclosure. Please do NOT report security vulnerability via GitHub issues.
License
MIT