On This Page
Equality Utilities
The Equality utilities provide functions for comparing values and objects in JavaScript. These functions offer more comprehensive equality checks than the built-in equality operators, particularly for complex data structures.
Functions
isEqual
function isEqual(a, b, options?)Performs a deep equality comparison between two values.
Deep Comparison This function performs a recursive comparison for objects and arrays, ensuring that nested structures are also checked for equality. It handles various edge cases, including
NaNcomparisons.
Parameters
| Name | Type | Description |
|---|---|---|
| a | any | The first value to compare |
| b | any | The second value to compare |
| options | object | Optional comparison options |
Options
| Name | Type | Default | Description |
|---|---|---|---|
| loose | boolean | false | Uses == instead of === for leaf value comparison |
| ignoreKeys | string[] | [] | Array of property names to skip during comparison |
| partial | boolean | false | Checks if a is a structural subset of b |
Returns
boolean - true if the values are deeply equal, false otherwise.
Example
import { isEqual } from '@semantic-ui/utils';
console.log(isEqual({a: 1, b: {c: 2}}, {a: 1, b: {c: 2}})); // trueconsole.log(isEqual([1, 2, 3], [1, 2, 3])); // trueconsole.log(isEqual({a: 1, b: 2}, {b: 2, a: 1})); // trueconsole.log(isEqual(NaN, NaN)); // trueconsole.log(isEqual({a: 1, b: 2}, {a: 1, b: 3})); // falseLoose Comparison
When loose is true, leaf values are compared with == instead of ===, allowing type coercion.
import { isEqual } from '@semantic-ui/utils';
console.log(isEqual('1', 1, { loose: true })); // trueconsole.log(isEqual(0, false, { loose: true })); // trueconsole.log(isEqual('1', 1)); // false (strict by default)Ignoring Keys
Use ignoreKeys to skip specific properties during comparison.
import { isEqual } from '@semantic-ui/utils';
const a = { name: 'Alice', updatedAt: 1000 };const b = { name: 'Alice', updatedAt: 2000 };
console.log(isEqual(a, b)); // falseconsole.log(isEqual(a, b, { ignoreKeys: ['updatedAt'] })); // truePartial Comparison
When partial is true, checks if a is a structural subset of b — every key in a must exist and match in b, but b may have additional keys.
import { isEqual } from '@semantic-ui/utils';
const subset = { a: 1 };const full = { a: 1, b: 2, c: 3 };
console.log(isEqual(subset, full)); // falseconsole.log(isEqual(subset, full, { partial: true })); // trueconsole.log(isEqual(full, subset, { partial: true })); // false (a has keys b doesn't)