[英]if inside a "for in" loop
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.在 areEqual 函数中,我正在检查两个对象的“值”。
if they are equal -> isEqual=true -> for loop shall continue if one of values are not equal -> isEqual = false and Break from the loop.如果它们相等 -> isEqual=true -> 如果值之一不相等,则 for 循环将继续 -> isEqual = false 并从循环中中断。
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));
Your code is equivalent to:您的代码相当于:
if (address1[key] === address2[key])
isEqual = true;
else
isEqual = false
break;
You need to wrap your else condition in {}
.您需要将 else 条件包装在{}
。 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.注意:由于您有Address
构造函数,因此此代码将起作用。 But note that, this just checks if the keys in address1
have the same value as address2
.但请注意,这只是检查address1
的键是否与address2
具有相同的值。 If you compare an empty object like this areEqual({}, address2)
it will log They are equal
because it never enters the for
loop.如果你比较一个像areEqual({}, address2)
这样的空对象areEqual({}, address2)
它会记录They are equal
因为它永远不会进入for
循环。 So, you can add an additional check if Object.keys(address1).length
is same as that of address2
因此,您可以添加额外的检查Object.keys(address1).length
是否与address2
相同
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:您有 isEquls: true 的默认值,因此如果任何键对不等于将 isEquls 设置为 false 并中断循环:
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));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.