UNPKG

diginext-utils

Version:
54 lines 1.67 kB
import { isObject } from "./isObject.js"; /** * Performs a deep equality comparison between two values. * Recursively compares objects and their nested properties. * * @template T - The type of values to compare * @param valueA - First value to compare * @param valueB - Second value to compare * @returns True if values are deeply equal * * @example * ```ts * isEqual({ a: 1, b: 2 }, { a: 1, b: 2 }); // true * isEqual({ a: 1, b: { c: 3 } }, { a: 1, b: { c: 3 } }); // true * isEqual({ a: 1 }, { a: 2 }); // false * isEqual([1, 2, 3], [1, 2, 3]); // true * ``` */ export function isEqual(valueA, valueB) { // Handle primitive types and same reference if (valueA === valueB) { return true; } // Handle null and undefined if (valueA == null || valueB == null) { return valueA === valueB; } // Handle arrays if (Array.isArray(valueA) && Array.isArray(valueB)) { if (valueA.length !== valueB.length) { return false; } return valueA.every((item, index) => isEqual(item, valueB[index])); } // Handle objects if (isObject(valueA) && isObject(valueB)) { const objA = valueA; const objB = valueB; const keysA = Object.keys(objA); const keysB = Object.keys(objB); if (keysA.length !== keysB.length) { return false; } return keysA.every((key) => { if (!(key in objB)) { return false; } return isEqual(objA[key], objB[key]); }); } // Different types or primitives that aren't equal return false; } //# sourceMappingURL=isEqual.js.map