UNPKG

shogun-core

Version:

SHOGUN CORE - Core library for Shogun Ecosystem

49 lines (48 loc) 1.48 kB
/** * Performs a deep equality check between two values. * Optimized for JSON-compatible data structures (primitives, arrays, objects). * Significantly faster than `JSON.stringify(a) === JSON.stringify(b)`. * * @param a - First value to compare * @param b - Second value to compare * @returns True if values are deeply equal, false otherwise */ export function deepEqual(a, b) { // Same reference or primitive value if (a === b) return true; // If either is null or not an object, they are not equal (since a !== b) if (a === null || typeof a !== 'object' || b === null || typeof b !== 'object') { return false; } // If constructors are different, they are not equal if (a.constructor !== b.constructor) return false; // Handle Arrays if (Array.isArray(a)) { var len = a.length; if (len !== b.length) return false; for (var i = 0; i < len; i++) { if (!deepEqual(a[i], b[i])) return false; } return true; } // Handle Objects var keysA = Object.keys(a); var keysB = Object.keys(b); if (keysA.length !== keysB.length) return false; for (var i = 0; i < keysA.length; i++) { var key = keysA[i]; if (!Object.prototype.hasOwnProperty.call(b, key)) return false; if (!deepEqual(a[key], b[key])) return false; } return true; }