JS如何判断两个对象是否相等
错误代码
function isObjectsEqual(obj1, obj2) {
// 判断两个对象的类型是否相同
if (typeof obj1 !== typeof obj2) {
return false;
}
// 递归比较对象的每个属性
for (let key in obj1) {
// 判断是否为对象的属性,而非原型链上的属性
if (obj1.hasOwnProperty(key) && obj2.hasOwnProperty(key)) {
// 如果属性值为对象,则递归比较对象
if (typeof obj1[key] === 'object' && typeof obj2[key] === 'object') {
if (!isObjectsEqual(obj1[key], obj2[key])) {
return false;
}
} else {
// 普通属性直接比较值
if (obj1[key] !== obj2[key]) {
return false;
}
}
} else {
return false; // 对象的属性不一致
}
}
return true; // 两个对象相等
}
#正确思路
function isEqual(first, second) {
if (first === undefined && second === undefined) {
return true;
} else if (first === null && second === null) {
return true;
}
if (typeof first !== 'object' || typeof second !== 'object') {
return first === second;
}
const arr1 = Object.keys(first);
const arr2 = Object.keys(second);
if (arr1.length !== arr2.length){
return false;}
for (const key in first) {
if (!second.hasOwnProperty(key)) return false;
if (!isEqual(first[key], second[key])) return false;
}
return true;
}
const obj1 = {p:[4,4,4,5,5],
o:{a:'s',
b:'s',
c:null,
}};
const obj2 = {
o:{a:'s',
b:'s',
c:null,
}, p:[4,4,4,5,5],
pss:[4,4,4,5,5],
};
if (isObjectsEqual(obj1, obj2)) {
console.log('两个对象相等');
} else {
console.log('两个对象不相等');
}