编写一个函数deepEqual,该函数接受两个对象作为参数,比较它们是否深度相等。如果对象的所有键和值都相等(包括嵌套对象),则返回true,否则返回false const obj1 = { a: 1, b: { c: 2 } }; const obj2 = { a: 1, b: { c: 2 } }; const obj3 = { a: 1, b: { c: 3 } }; console.log(deepEqual(obj1, obj2)); // 输出 true console.log(deepEqual(obj1, obj3)); // 输出 false
时间: 2024-04-11 16:28:11 浏览: 20
你可以使用递归来检查对象的深度相等性。以下是一个实现deepEqual函数的示例代码:
```javascript
function deepEqual(obj1, obj2) {
// 检查基本类型的相等性
if (obj1 === obj2) {
return true;
}
// 检查对象类型的相等性
if (typeof obj1 !== 'object' || typeof obj2 !== 'object' || obj1 === null || obj2 === null) {
return false;
}
// 获取两个对象的属性名称
const keys1 = Object.keys(obj1);
const keys2 = Object.keys(obj2);
// 检查属性数量是否相等
if (keys1.length !== keys2.length) {
return false;
}
// 递归检查每个属性的值是否相等
for (let key of keys1) {
if (!keys2.includes(key) || !deepEqual(obj1[key], obj2[key])) {
return false;
}
}
return true;
}
const obj1 = { a: 1, b: { c: 2 } };
const obj2 = { a: 1, b: { c: 2 } };
const obj3 = { a: 1, b: { c: 3 } };
console.log(deepEqual(obj1, obj2)); // 输出 true
console.log(deepEqual(obj1, obj3)); // 输出 false
```
这个函数会首先检查两个对象是否引用同一个对象,如果是,则直接返回true。然后,它会检查两个对象是否为null或者不是object类型,如果是,则返回false。接下来,它会获取两个对象的属性名称,并检查属性数量是否相等。最后,它会递归地检查每个属性的值是否相等。如果所有的属性和值都相等,则返回true,否则返回false。