Reputation: 79
Checking for equality of two objects:
I am not sure about how my code flows and how can I fix this.
Inside areEqual function, I am checking "value" of two objects.
if they are equal -> isEqual=true -> for loop shall continue if one of values are not equal -> isEqual = false and Break from the loop.
But i don't get the desired results. What logic am i exactly not understanding here?
function Address (street, city, zipCode) {
this.street = street;
this.city = city;
this.zipCode = zipCode;
}
let address1 = new Address('a', 'b', 'c');
let address2 = new Address('a', 'd', 'c');
//checking for equality between two objects
function areEqual(address1, address2){
let isEqual = true;
for(let key in address1) {
if(address1[key] === address2[key])
isEqual = true;
else
isEqual = false
break;
}
if(isEqual) return 'They are equal';
else return 'They are not equal';
}
console.log(areEqual(address1, address2));
Upvotes: 2
Views: 76
Reputation: 35222
Your code is equivalent to:
if (address1[key] === address2[key])
isEqual = true;
else
isEqual = false
break;
You need to wrap your else condition in {}
. Currently it breaks out of the loop on the first iteration
function Address(street, city, zipCode) {
this.street = street;
this.city = city;
this.zipCode = zipCode;
}
let address1 = new Address('a', 'b', 'c');
let address2 = new Address('a', 'd', 'c');
let address3 = new Address('x', 'y', 'z');
let address4 = new Address('x', 'y', 'z');
//checking for equality between two objects
function areEqual(address1, address2) {
let isEqual = true;
for (let key in address1) {
if (address1[key] === address2[key])
isEqual = true;
else {
isEqual = false
break;
}
}
if (isEqual) return 'They are equal';
else return 'They are not equal';
}
console.log(areEqual(address1, address2));
console.log(areEqual(address3, address4));
You can avoid these type of errors if you format your code. Every code editor will have a shortcut for this functionality.
Note: Since you have constructor function for Address
, this code will work. But note that, this just checks if the keys in address1
have the same value as address2
. If you compare an empty object like this areEqual({}, address2)
it will log They are equal
because it never enters the for
loop. So, you can add an additional check if Object.keys(address1).length
is same as that of address2
Upvotes: 1
Reputation: 543
You have default value of isEquls: true, so if any of keys pair will be not equals than set isEquls to false and break the loop:
function Address (street, city, zipCode) {
this.street = street;
this.city = city;
this.zipCode = zipCode;
}
let address1 = new Address('a', 'd', 'd');
let address2 = new Address('a', 'd', 'c');
//checking for equality between two objects
function areEqual(address1, address2){
let isEqual = true;
for(let key in address1) {
if(address1[key] !== address2[key])
{
isEqual = false
break;
}
}
if(isEqual) return 'They are equal';
else return 'They are not equal';
}
console.log(areEqual(address1, address2));
Upvotes: 0