isEqual
Deep equality for the values a Feathers app passes around — data, results, queries and params. Plain objects are compared by their own enumerable keys in any order (symbols included - sequelize uses them as operators), arrays by their elements, dates and regular expressions by value, a mongo ObjectId (anything with toHexString) by its hex string, and everything else - functions, class instances, maps, sets - by reference: a class instance may keep its state in private fields, so equal looking instances aren't necessarily equal. Self-references are fine.
It never mistakes different values for equal, but may miss equal ones (two distinct Maps with the same entries).
import { isEqual } from 'feathers-utils/helpers';Example
import { isEqual } from 'feathers-utils/helpers'
isEqual({ a: 1, b: [2] }, { b: [2], a: 1 }) // => true
isEqual(new Date(0), new Date(0)) // => true
isEqual({ name: /^a/ }, { name: /^b/ }) // => falseType declaration
Show Type Declarations
/**
* Deep equality for the values a Feathers app passes around — data, results,
* queries and params. Plain objects are compared by their own enumerable keys
* in any order (symbols included - sequelize uses them as operators), arrays by
* their elements, dates and regular expressions by value, a mongo `ObjectId`
* (anything with `toHexString`) by its hex string, and everything else -
* functions, class instances, maps, sets - by reference: a class instance may
* keep its state in private fields, so equal looking instances aren't
* necessarily equal. Self-references are fine.
*
* It never mistakes different values for equal, but may miss equal ones (two
* distinct `Map`s with the same entries).
*
* @example
* ```ts
*
*
* isEqual({ a: 1, b: [2] }, { b: [2], a: 1 }) // => true
* isEqual(new Date(0), new Date(0)) // => true
* isEqual({ name: /^a/ }, { name: /^b/ }) // => false
* ```
*
* @see https://utils.feathersjs.com/helpers/is-equal.html
*/
export declare const isEqual: (a: unknown, b: unknown) => boolean| Argument | Type | Description |
|---|---|---|
| a | unknown | |
| b | unknown |
Coming from lodash
Unlike _.isEqual, class instances, Maps and Sets are compared by reference, and a mongo ObjectId by its hex string:
| a, b | _.isEqual | isEqual |
|---|---|---|
new ObjectId(x), new ObjectId(x) | true | true |
new Map([[1, 2]]), new Map([[1, 2]]) | true | false |
| two instances of a class with private state | true | false |
So isEqual can report two equal values as different, but never two different values as equal — the safe direction for deciding whether a query, a cached result or a patch has changed.
