我正在参加「码上掘金挑战赛」详情请看:码上掘金挑战赛来了!
介绍
深比较的概念比较简单,就是判断两个对象是否完全相等,不是地址内存单元的比较,是类似深拷贝那种属性的值逐个的对比,如果存在一个不相同则不同。
例子
let obj1 = {
name:"dzp"
other:{a:2}
}
let obj2 = {
name:"dzp"
other:{a:2}
}
let obj3 = {
name:"dzp"
other:{a:3}
}
其中obj1和obj2的比较就是true。它们内部的逐级属性的值都是相同的,而obj1和obj3的比较返回的就是false.
码上掘金
原理介绍
let tmp = true
function deepCompare(obj1,obj2) {
if(obj1 && obj2 && typeof obj1=== typeof obj2) {
if(typeof obj1 !== "object") if(obj1!==obj2) tmp=false
else {
for(let key in obj1) {
let val1 = obj1[key]
let val2 = obj2[key]
deepCompare(val1,val2)
}
}
} else {
tmp = false
}
}
let obj1 = {
a:{
b:1
},
c:2
}
let obj2 = {
a:{
b:1
}
,c:2
}
deepCompare(obj1,obj2)
console.log(tmp)
实现思路:
- 由于对象的层级的不确定,因此二者的深度比较是基于递归实现的。
- 判断对象o1和o2的类型如果不同,直接返回false
- 判断如果o2和o2如果是非对象,判断值是否相同
- 循环对象o1或者o2,继续完成递归的深度比较
- 全局使用一个tmp表示是否是相同的。
总结
通过上面深度比较的介绍和实现过程,大家肯定已经比较清楚了深度比较的设计和实际原理,大家下多多练习和实践,一定可以更加熟练的掌握相关的知识点。谢谢大家的支持,有什么疑问可以评论。