js中如何判断两个对象是否相等
2022-09-18
2 min read
1、判断两个对象的引用地址
ES6中,提供了一个方法可以用来判断两个对象的引用地址是否一致:Object.is(value1, value2)
。返回值为一个布尔值,如果两个对象引用地址一致则返回值为true,反之则为false
####2、判断两个对象内容一致
想要比较两个对象的内容是否一致,需要遍历对象所有的键名和键值,判断是否完全一致。
实现思路:
1. 先判断两个对象引用地址是否一致
2. 获取对象所有键名的数组,并且判断长度是否一致
3. 遍历键名数组,判断键值是否都相等
function isObjectValueEqual(obj1, obj2){
// 1.判断引用地址是否一致,一致则直接返回true
if(Object.is(obj1, obj2)) return true
const props1 = Object.getOwnPropertyNames(obj1)
const props2 = Object.getOwnPropertyNames(obj2)
// 2.判断键名数组长度是否一致,不一致则直接返回false
if(props1.length !== props2.length) return false;
// 3.键名数组长度一致,遍历键名数组,判断所有值是否一致
for(let prop in obj1){
// 3.1判断obj1的键值在obj2中是否存在,存在则进一步判断值,不存在直接返回false
if(obj2.hasOwnProperty(prop)){
// 3.2判断obj1的键值是否为对象,是则递归判断,否则直接判断值是否相等
if(typeof obj1[prop] === 'object'){
if(!isObjectValueEqual(obj1[prop],obj2[prop])) return false
}else{
if(obj1[prop] !== obj2[prop]) return false
}
}else{
return false
}
}
return true
}