【发布时间】:2020-06-22 22:00:04
【问题描述】:
好的,所以我正在尝试编写一个 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
我的问题是:
一个。很明显,为什么我的不工作?
湾。 if (!deepEquals(a[key], b[key]) 语句在说什么?我从未见过这样使用递归。这如何使代码工作?
C。为什么她会放一个“回归真实”; for {} 块之后的语句?为什么放在那里,代码什么时候放在那里?
如果有人能启发我了解我在这里所做的事情,那就太好了。非常感谢。
约旦
【问题讨论】:
标签: javascript function loops recursion