好的,我正在尝试编写一个deepEquals函数,它比较javascript中的对象,并告诉您它们是否相等。也就是说,如果对象具有相同的属性,而这些相同的属性具有相同的值。财产的顺序并不重要。我对代码的递归部分以及它的工作原理感到困惑。我看过一段视频,她写的代码和我差不多,但我不明白她是怎么工作的。不管怎么说,这是她的代码。
let deepEquals = (a,b) => {
if (a === b) {
return true;
} else if (a && b && typeof a === 'object' && typeof b === 'object' && Object.keys(a).length === Object.keys(b).length) {
for (let key in a) {
if (key in b) {
if (!deepEquals(a[key], b[key])) {
return false;
}
}
else {
return false;
}
}
return true;
}
return false;
};这是我的不管用的:
let deepEquals = (a,b) => {
if ( a === b ) {
return true;
} else if ( a && b && typeof a === 'object' && typeof b === 'object' && Object.keys(a).length === Object.keys(b).length ) {
for ( let key in a ) {
if ( key in b ) {
deepEquals(a[key], b[key]);
}
}
}
return false;
};let person = {
lastName: "Bone",
firstName: "Jordan",
age: 34,
position: "Information Technology",
nest: {
value: 13,
lamp: "no",
etc: false,
testNull: null
}
}
let person1 = {
firstName: "Jordan",
lastName: "Bone",
age: 34,
position: "Information Technology",
nest: {
value: 13,
lamp: "no",
etc: false,
testNull: null
}
}
console.log(deepEquals(person, person1));
C:\Node\Jordan\JSON>node deepEqualsYouTube.js
false我的问题是:
很明显,为什么我的不起作用?
如果(!deepEquals(akey,bkey) )声明是怎么说的?我从来没有见过像这样使用递归。这是如何使代码工作的?
为什么她在for {}块后面加上一个“返回true;”语句?为什么把它放在那里,代码什么时候会落在那里呢?
如果有人能告诉我我在这里做什么,那就太好了。非常感谢。
乔丹
发布于 2020-06-22 22:04:11
a)如果键存在于两个对象中,则丢弃deepEquals的结果。
变化
if ( key in b ) {
deepEquals(a[key], b[key]);
}至
if (!( key in b ) || !deepEquals(a[key], b[key])){
return false;
}b) (!deepEquals(a[key], b[key])正在检查在键key处对对象a和b的值调用deepEquals的结果是否为假,即值不完全相等。
c)循环后有一个return true,因为循环检查任何不完全相等的值。只有当所有值相等时,执行才会达到这个点,即deepEquals(a[key], b[key])没有为任何key返回false,而且两个对象都有相同的键。在这一点上,这两个对象已被证明是非常平等的。
https://stackoverflow.com/questions/62524168
复制相似问题