I have a program that does a deep compare on 2 objects provided to it and uses recursion to do so. My problem is that since I am using a global variable to retain information, I have to reset it every time prior to making any subsequent calls to the function. Is there someway I can maintain the variable value other than using a global variable and have it be not so cumbersome?
let isEqual = true;
function deepEqual(object1, object2) {
if (!((typeof(object1) == 'object' && typeof(object2) == 'object') || (object1 && object2))) {
return isEqual = object1 === object2;
} else if (typeof(object1) == 'object' && typeof(object2) == 'object') {
if ((object1 && object2)) {
let object1Keys = Object.keys(object1);
let object2Keys = Object.keys(object2);
if (object1Keys.length == object2Keys.length) {
for (let index = 0; index < object1Keys.length; index++) {
if (isEqual) {
if (!(typeof(object1[object1Keys[index]]) == 'object' && typeof(object2[object2Keys[index]]) == 'object')) {
isEqual = (object1[object1Keys[index]] === object2[object2Keys[index]]) && (object1Keys[index] === object2Keys[index]);
} else {
deepEqual(object1[object1Keys[index]], object2[object2Keys[index]]);
}
} else {
return isEqual = false;
}
}
}
}
}
return isEqual;
}
let obj1 = {
a: 'somestring',
b: 42,
c: {
1: 'one',
2: {
4: 'Three'
}
}
};
let obj2 = {
a: 'somestring',
b: 42,
c: {
1: 'one',
2: {
3: 'Three'
}
}
};
console.log("obj1 == obj2 : ");
console.log(deepEqual(obj1, obj2));
let obj3 = {
a: 'somestring',
b: 42,
c: {
1: 'one',
2: {
3: 'Three'
}
}
};
let obj4 = {
a: 'somestring',
b: 42,
c: {
1: 'one',
2: {
3: 'Three'
}
}
};
console.log("obj3 == obj4 : ");
isEqual = true;
console.log(deepEqual(obj3, obj4));
let obj = {name: {gender: "F"}, age: 20};
isEqual = true;
console.log(deepEqual(obj, {name: {gender: "F"}, age: 20}));