什么是深度比较
lodash.isEqual : 比较对象的键值对,都一样则为true,反之false; 若对象的属性值是引用类型,比较的是实际值不是地址(当然,若地址是一样的,那么肯定相等,return true);
思路
默认不会比较函数
1.不是对象,直接返回比较结果,return ===
2. 地址相等的对象 return true
3. 两个都是对象||数组
(1)比较两对象keys的个数
(2)以obj1的key为基准,和obj2依次递归比较
实现
function isEqual (obj1, obj2) {
//不是对象,直接返回比较结果
if (typeof obj1 !== 'object' || typeof obj2 !== 'object') {
return obj1 === obj2
}
//都是对象,且地址相同,返回true
if (obj2 === obj1) return true;
//是对象或数组
let keys1 = Object.keys(obj1)
let keys2 = Object.keys(obj2)
//比较keys的个数,若不同,肯定不相等
if (keys1.length !== keys2.length) return false;
for (let k of keys1) {
//递归比较键值对
let res = isEqual(obj1[k], obj2[k])
if (!res) return false;
}
return true;
}
const obj1 = {
a: 100,
b: {
x: 100,
y: 200
}
}
const obj2 = {
a: 200,
b: {
x: 100,
y: 200
}
}
console.log(isEqual(obj1, obj2)) //false
菜鸟一只,有不对的地方欢迎指正 . ☺
若有哪里没写明白,欢迎询问,会尽早回答. ☺