obj1在用于深度比较的算法中未定义



JS代码:

function deepEqual(obj1, obj2) {
f = false; //comparison result
if (Object.keys(obj1).join("") === Object.keys(obj2).join("")) { //checking if properties are equal
var table = Object.keys(obj1);
for (let entry of table) {
console.log("entry",entry); //outputs value  
console.log("obj1",obj1);
console.log("obj1.entry",obj1.entry); // why is it undefined(if I write obj1.value it outputs 10)
if (obj1.entry == obj2.entry) {
f = true;
} else {
f = false;
break;
}
}
}
return f;
}
console.log(deepEqual({value:10},{value:10}));

代码有很多问题,可以简化如下。

function deepEqual(obj1 = null, obj2 = null) {
if (obj1 === null || obj2 === null) return false;
if (typeof obj1 !== "object") return obj1 == obj2;
if (Object.keys(obj1).length !== Object.keys(obj2).length) return false;
for (let key in obj1) {
const result = deepEqual(obj1[key], obj2[key]);
if (!result) return false;
}
return true;
}
console.log(
deepEqual(
{ a: 10, value: 10, b: { c: 10 } },
{ b: { c: 10 }, value: 10, a: 10 }
)
);
console.log(
deepEqual(
{ a: 10, value: 10, b: { c: 10 } },
{ b: { c: 10, a: 1 }, value: 10, a: 10 }
)
);

最新更新