What is deep-eql?
The deep-eql package is a deep equality testing library that allows developers to compare two values for structural equality, rather than just reference equality. It is useful for testing and assertions when you need to ensure that two complex objects, arrays, or other nested structures are equivalent in content.
What are deep-eql's main functionalities?
Deep Equality Check
This feature allows you to check if two objects are deeply equal, meaning their structure and nested values are equivalent.
const deepEql = require('deep-eql');
const obj1 = { a: 1, b: { c: 2 } };
const obj2 = { a: 1, b: { c: 2 } };
console.log(deepEql(obj1, obj2)); // true
Custom Type Comparisons
This feature allows you to provide a custom comparator function to define equality for specific types or instances.
const deepEql = require('deep-eql');
class Person {
constructor(name) {
this.name = name;
}
}
const person1 = new Person('Alice');
const person2 = new Person('Alice');
console.log(deepEql(person1, person2, { comparator: (a, b) => a.name === b.name })); // true
Other packages similar to deep-eql
lodash.isequal
Lodash's isEqual function performs a deep comparison between two values to determine if they are equivalent. It is similar to deep-eql but is part of the larger Lodash utility library, which offers a wide range of functions for manipulating and comparing data.
chai
Chai is a BDD / TDD assertion library for node and the browser that can be delightfully paired with any javascript testing framework. It includes a deep equality assertion, similar to deep-eql, as part of its extensive assertion library.
deep-equal
This package provides a function for deep equality checks, similar to deep-eql. It is a standalone library that focuses solely on deep equality without additional dependencies or utilities.
deep-eql
Improved deep equality testing for Node.js and the browser.
Installation
Node.js
deep-eql
is available on npm.
$ npm install deep-eql
Component
deep-eql
is available as a component.
$ component install chaijs/deep-eql
Usage
Rules
- Strict equality for non-traversable nodes according to egal.
eql(NaN, NaN).should.be.true;
eql(-0, +0).should.be.false;
- Arguments are not Arrays:
eql([], arguments).should.be.false;
eql([], Array.prototype.slice.call(arguments)).should.be.true;
License
(The MIT License)
Copyright (c) 2013 Jake Luer jake@alogicalparadox.com
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.