@2utils/is-equal

An ordinary isEqual function.

Usage no npm install needed!

<script type="module">
  import 2utilsIsEqual from 'https://cdn.skypack.dev/@2utils/is-equal';
</script>

README

@2utils/is-equal

An ordinary isEqual function.

npm i @2utils/is-equal

Tests

Tests were brazenly stolen from lodash

Passed

  • should compare primitives
  • should compare arrays
  • should treat arrays with identical values but different non-index properties as equal
  • should compare sparse arrays
  • should compare plain objects
  • should compare objects regardless of key order
  • should compare nested objects
  • should compare object instances
  • should compare functions
  • should compare objects with constructor properties
  • should compare objects with shared property values
  • should avoid common type coercions
  • should compare arguments objects
  • should compare date objects
  • should compare functions
  • should return an unwrapped value when implicitly chaining
  • should compare maps
  • should compare regexes
  • should compare sets
  • should compare buffers
  • should compare array buffers
  • should treat objects created by Object.create(null) like plain objects

Not passed

Circular

  • should compare arrays with circular references
  • should have transitive equivalence for circular references of arrays
  • should compare objects with circular references
  • should have transitive equivalence for circular references of objects
  • should compare objects with multiple circular references
  • should compare objects with complex circular references
  • should compare maps with circular references
  • should compare sets with circular references

  • should compare array views
  • should compare error objects
  • should compare promises by reference
  • should compare symbol properties
  • should compare wrapped values
  • should compare wrapped and non-wrapped values
  • should work as an iteratee for _.every
  • should not error on DOM elements
  • should return true for like-objects from different documents
  • should return false for objects with custom toString methods
  • should return a wrapped value when explicitly chaining

Benchmark

Tests were run from the fast-deep-equal package. They don 't show the real picture because I don 't cover all test cases. Just for fun.

pos. package results
1. fast-deep-equal 218,604 ops/sec ±2.32% (80 runs sampled)
2. 🐢 @2utils/is-equal 201,469 ops/sec ±2.59% (83 runs sampled)
3. fast-equals 195,025 ops/sec ±3.06% (79 runs sampled)
4. fast-deep-equal/es6 192,544 ops/sec ±2.60% (82 runs sampled)
5. nano-equal 126,143 ops/sec ±2.68% (79 runs sampled)
6. shallow-equal-fuzzy 112,192 ops/sec ±1.96% (83 runs sampled)
7. underscore.isEqual 62,441 ops/sec ±1.78% (86 runs sampled)
8. util.isDeepStrictEqual 45,652 ops/sec ±1.69% (85 runs sampled)
9. lodash.isEqual 34,102 ops/sec ±1.55% (87 runs sampled)
10. deep-eql 28,662 ops/sec ±5.36% (78 runs sampled)
11. ramda.equals 10,623 ops/sec ±1.84% (86 runs sampled)
12. assert.deepStrictEqual 271 ops/sec ±1.22% (82 runs sampled)
13. deep-equal 61.11 ops/sec ±4.58% (40 runs sampled)