Equality UtilitiesAPI reference for equality comparison functionsscaleAPI Reference
Categories

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 NaN comparisons. A class instance compares by its own equals() when both operands carry one, the convention Temporal, Immutable.js and Luxon share, so two Temporal.Instant values are equal when they mark the same instant.

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, at the top level only
deepIgnore boolean false Applies ignoreKeys at every depth instead of just the top level
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}})); // true
console.log(isEqual([1, 2, 3], [1, 2, 3])); // true
console.log(isEqual({a: 1, b: 2}, {b: 2, a: 1})); // true
console.log(isEqual(NaN, NaN)); // true
console.log(isEqual({a: 1, b: 2}, {a: 1, b: 3})); // false
console.log(isEqual(Temporal.Instant.from('2026-09-06T14:30Z'), Temporal.Instant.from('2026-09-06T14:30Z'))); // true (by its own equals)

Loose 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 })); // true
console.log(isEqual(0, false, { loose: true })); // true
console.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)); // false
console.log(isEqual(a, b, { ignoreKeys: ['updatedAt'] })); // true

Partial 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)); // false
console.log(isEqual(subset, full, { partial: true })); // true
console.log(isEqual(full, subset, { partial: true })); // false (a has keys b doesn't)
Previous
Environment
Next
Functions