Может ли кто-нибудь провести меня через функцию рекурсии в этом коде ?, !deepEqual(a[key], b[key])
.Как он сравнивает свои значения при каждом вызове? ...
function deepEqual(a, b) {
if (a === b) return true;
if (a == null || typeof a != "object" ||
b == null || typeof b != "object") return false;
let keysA = Object.keys(a), keysB = Object.keys(b);
if (keysA.length != keysB.length) return false;
for (let i = 0; i <= keysA.length -1; i++) {
let key = keysA[i];
if (!keysB.includes(key) || !deepEqual(a[key], b[key])) return false;
}
return true;
}
let obj = {here: {is: "an"}, object: 2};
console.log(deepEqual(obj, obj));
// → true
console.log(deepEqual(obj, {here: {is: "as"}, object: 3}));
// → false
console.log(deepEqual(obj, {here: {is: "an"}, object: 2}));
// → true
Мне действительно нужно понять, как цикл функции рекурсии проходит через второй вызов, не возвращая true при первой проверке и false при второй проверке для if (a == null || typeof a != "object" ||
b == null || typeof b != "object") return false;
Поскольку значение !deepEqual(a["is"], b["is"]))
== !deepEqual("is", "is"))
и, следовательно, должно возвращать true;
при первой проверке на if (a === b) return true;
.и верните false;
во второй проверке для if (a == null || typeof a != "object" || b == null || typeof b != "object") return false;
, потому что это не объект.
не мешает ли функции завершить проверку оставшихся свойств?
Может кто-нибудь сделать это достаточно ясно для меня?
let obj = {here: {is: "an", that: "at", name: "ola", here: {is: "as"}, object: 2};
console.log(deepEqual(obj, obj));
// → true
console.log(deepEqual(obj, {here: {is: "an", that: "at", name: "ola", here: {is: "as"}, object: 3}));
// → false
//The only different property value is in the second argument's last property.