function recursiveComparison(objA, objB, flag) {
for (let key in objA) {
if (!objB.hasOwnProperty(key)) flag = false;
flag = compareDeeply(objA[key], objB[key]);
if (!flag) break;
}
return flag;
}
const utils = {
isArray: (value) => Array.isArray(value),
isObject: (value) => typeof (value) === "object",
getLength: (value) => {
if (utils.isArray(value)) return value.length;
if (utils.isObject(value)) return Object.keys(value).length;
}
}
function compareDeeply(objA, objB) {
if (!utils.isObject(objA) || !utils.isObject(objB)) return objA === objB;
if (objA.constructor !== objB.constructor) return false;
if (utils.getLength(objA) !== utils.getLength(objB)) return false;
return recursiveComparison(objA, objB, true);
}
export default compareDeeply;