|
@@ -73,4 +73,41 @@ export const set = (obj: any, path: string | string[], value: any): void => {
|
|
|
if (i === pathArray.length - 1) acc[key] = value;
|
|
|
return acc[key];
|
|
|
}, obj);
|
|
|
-};
|
|
|
+};
|
|
|
+
|
|
|
+
|
|
|
+export function deepEqual(a: any, b: any): boolean {
|
|
|
+ // If both are primitives, return true if they are equal
|
|
|
+ if (a === b) return true;
|
|
|
+
|
|
|
+ // If either of them is null or not an object, return false
|
|
|
+ if (a === null || typeof a !== "object" || b === null || typeof b !== "object") return false;
|
|
|
+
|
|
|
+ // Get the keys of both objects
|
|
|
+ const keysA = Object.keys(a), keysB = Object.keys(b);
|
|
|
+
|
|
|
+ // If they have different number of keys, they are not equal
|
|
|
+ if (keysA.length !== keysB.length) return false;
|
|
|
+
|
|
|
+ // Check each key in A to see if it exists in B and its value is the same in both
|
|
|
+ for (const key of keysA) {
|
|
|
+ if (!keysB.includes(key) || !deepEqual(a[key], b[key])) return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
+}
|
|
|
+
|
|
|
+export function deepArrayEqual(arr1: any[], arr2: any[]): boolean {
|
|
|
+ // If they're not both arrays, return false
|
|
|
+ if (!Array.isArray(arr1) || !Array.isArray(arr2)) return false;
|
|
|
+
|
|
|
+ // If they don't have the same length, they're not equal
|
|
|
+ if (arr1.length !== arr2.length) return false;
|
|
|
+
|
|
|
+ // Check each element of arr1 against the corresponding element of arr2
|
|
|
+ for (let i = 0; i < arr1.length; i++) {
|
|
|
+ if (!deepEqual(arr1[i], arr2[i])) return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
+}
|