JavaScript 对象深度比较:无需 JSON.stringify() 的完美方法
可以使用递归来比较两个对象是否相等。首先判断两个对象的类型是否相等,如果不相等则返回false。然后判断两个对象的属性个数是否相等,如果不相等则返回false。接着递归比较两个对象的属性值是否相等。如果所有属性值都相等,则返回true,否则返回false。
下面是一个完美的方法示例:
function deepEqual(obj1, obj2) {
// 判断类型是否相等
if (typeof obj1 !== typeof obj2) {
return false;
}
// 判断是否为对象
if (typeof obj1 === 'object' && obj1 !== null && obj2 !== null) {
// 判断属性个数是否相等
if (Object.keys(obj1).length !== Object.keys(obj2).length) {
return false;
}
for (let key in obj1) {
// 递归比较属性值
if (!deepEqual(obj1[key], obj2[key])) {
return false;
}
}
return true;
}
// 直接比较基本类型的值
return obj1 === obj2;
}
使用示例:
const obj1 = { name: 'Alice', age: 20 };
const obj2 = { name: 'Alice', age: 20 };
console.log(deepEqual(obj1, obj2)); // true
const obj3 = { name: 'Bob', age: 30 };
const obj4 = { name: 'Alice', age: 20 };
console.log(deepEqual(obj3, obj4)); // false
这个方法可以递归比较对象的属性值,不使用JSON.stringify()可以避免一些特殊情况下的问题。
原文地址: https://www.cveoy.top/t/topic/pgdQ 著作权归作者所有。请勿转载和采集!