feat: implement deepEquals function and enhance form service validation

This commit is contained in:
puriphatt 2025-01-06 16:45:26 +07:00
parent 2aa397678d
commit be1559ac4f
3 changed files with 125 additions and 13 deletions

View file

@ -13,3 +13,46 @@ export function insertAt<T extends any>(arr: T[], idx: number, item: T) {
}
export default arr;
export function deepEquals(
obj1: Record<string, any>,
obj2: Record<string, any>,
): boolean {
// If both objects are the same reference, they are deeply equal
if (obj1 === obj2) {
return true;
}
// If either object is not an object or null, they are not deeply equal
if (
typeof obj1 !== 'object' ||
obj1 === null ||
typeof obj2 !== 'object' ||
obj2 === null
) {
return false;
}
// Get the set of keys for both objects
const keys1 = Object.keys(obj1);
const keys2 = Object.keys(obj2);
// If the number of keys is different, they are not deeply equal
if (keys1.length !== keys2.length) {
return false;
}
// Check if all keys in obj1 exist in obj2
for (const key of keys1) {
if (!keys2.includes(key)) {
return false;
}
// Recursively check if the values for each key are deeply equal
if (!deepEquals(obj1[key], obj2[key])) {
return false;
}
}
return true;
}