@featurevisor/core
Version:
Core package of Featurevisor for Node.js usage
77 lines (64 loc) • 1.65 kB
text/typescript
export function checkIfObjectsAreEqual(obj1: any, obj2: any): boolean {
if (obj1 === obj2) {
return true;
}
if (typeof obj1 !== "object" || obj1 === null || typeof obj2 !== "object" || obj2 === null) {
return false;
}
const keys1 = Object.keys(obj1);
const keys2 = Object.keys(obj2);
if (keys1.length !== keys2.length) {
return false;
}
for (const key of keys1) {
if (!keys2.includes(key)) {
return false;
}
const val1 = obj1[key];
const val2 = obj2[key];
if (Array.isArray(val1) && Array.isArray(val2)) {
if (!checkIfArraysAreEqual(val1, val2)) {
return false;
}
} else if (typeof val1 === "object" && typeof val2 === "object") {
if (!checkIfObjectsAreEqual(val1, val2)) {
return false;
}
} else if (val1 !== val2) {
return false;
}
}
return true;
}
export function checkIfArraysAreEqual(arr1: any[], arr2: any[]): boolean {
if (arr1 === arr2) {
return true;
}
if (!Array.isArray(arr1) || !Array.isArray(arr2)) {
return false;
}
if (arr1.length !== arr2.length) {
return false;
}
for (let i = 0; i < arr1.length; i++) {
const val1 = arr1[i];
const val2 = arr2[i];
if (Array.isArray(val1) && Array.isArray(val2)) {
if (!checkIfArraysAreEqual(val1, val2)) {
return false;
}
} else if (
typeof val1 === "object" &&
typeof val2 === "object" &&
val1 !== null &&
val2 !== null
) {
if (!checkIfObjectsAreEqual(val1, val2)) {
return false;
}
} else if (val1 !== val2) {
return false;
}
}
return true;
}