You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

96 lines
3.2 KiB

  1. # fast-deep-equal
  2. The fastest deep equal with ES6 Map, Set and Typed arrays support.
  3. [![Build Status](https://travis-ci.org/epoberezkin/fast-deep-equal.svg?branch=master)](https://travis-ci.org/epoberezkin/fast-deep-equal)
  4. [![npm](https://img.shields.io/npm/v/fast-deep-equal.svg)](https://www.npmjs.com/package/fast-deep-equal)
  5. [![Coverage Status](https://coveralls.io/repos/github/epoberezkin/fast-deep-equal/badge.svg?branch=master)](https://coveralls.io/github/epoberezkin/fast-deep-equal?branch=master)
  6. ## Install
  7. ```bash
  8. npm install fast-deep-equal
  9. ```
  10. ## Features
  11. - ES5 compatible
  12. - works in node.js (8+) and browsers (IE9+)
  13. - checks equality of Date and RegExp objects by value.
  14. ES6 equal (`require('fast-deep-equal/es6')`) also supports:
  15. - Maps
  16. - Sets
  17. - Typed arrays
  18. ## Usage
  19. ```javascript
  20. var equal = require('fast-deep-equal');
  21. console.log(equal({foo: 'bar'}, {foo: 'bar'})); // true
  22. ```
  23. To support ES6 Maps, Sets and Typed arrays equality use:
  24. ```javascript
  25. var equal = require('fast-deep-equal/es6');
  26. console.log(equal(Int16Array([1, 2]), Int16Array([1, 2]))); // true
  27. ```
  28. To use with React (avoiding the traversal of React elements' _owner
  29. property that contains circular references and is not needed when
  30. comparing the elements - borrowed from [react-fast-compare](https://github.com/FormidableLabs/react-fast-compare)):
  31. ```javascript
  32. var equal = require('fast-deep-equal/react');
  33. var equal = require('fast-deep-equal/es6/react');
  34. ```
  35. ## Performance benchmark
  36. Node.js v12.6.0:
  37. ```
  38. fast-deep-equal x 261,950 ops/sec ±0.52% (89 runs sampled)
  39. fast-deep-equal/es6 x 212,991 ops/sec ±0.34% (92 runs sampled)
  40. fast-equals x 230,957 ops/sec ±0.83% (85 runs sampled)
  41. nano-equal x 187,995 ops/sec ±0.53% (88 runs sampled)
  42. shallow-equal-fuzzy x 138,302 ops/sec ±0.49% (90 runs sampled)
  43. underscore.isEqual x 74,423 ops/sec ±0.38% (89 runs sampled)
  44. lodash.isEqual x 36,637 ops/sec ±0.72% (90 runs sampled)
  45. deep-equal x 2,310 ops/sec ±0.37% (90 runs sampled)
  46. deep-eql x 35,312 ops/sec ±0.67% (91 runs sampled)
  47. ramda.equals x 12,054 ops/sec ±0.40% (91 runs sampled)
  48. util.isDeepStrictEqual x 46,440 ops/sec ±0.43% (90 runs sampled)
  49. assert.deepStrictEqual x 456 ops/sec ±0.71% (88 runs sampled)
  50. The fastest is fast-deep-equal
  51. ```
  52. To run benchmark (requires node.js 6+):
  53. ```bash
  54. npm run benchmark
  55. ```
  56. __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.
  57. ## Enterprise support
  58. fast-deep-equal package is a part of [Tidelift enterprise subscription](https://tidelift.com/subscription/pkg/npm-fast-deep-equal?utm_source=npm-fast-deep-equal&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) - it provides a centralised commercial support to open-source software users, in addition to the support provided by software maintainers.
  59. ## Security contact
  60. To report a security vulnerability, please use the
  61. [Tidelift security contact](https://tidelift.com/security).
  62. Tidelift will coordinate the fix and disclosure. Please do NOT report security vulnerability via GitHub issues.
  63. ## License
  64. [MIT](https://github.com/epoberezkin/fast-deep-equal/blob/master/LICENSE)