码上掘金实现深比较

100 阅读1分钟

我正在参加「码上掘金挑战赛」详情请看:码上掘金挑战赛来了!

介绍

深比较的概念比较简单,就是判断两个对象是否完全相等,不是地址内存单元的比较,是类似深拷贝那种属性的值逐个的对比,如果存在一个不相同则不同。

例子

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)

实现思路:

  1. 由于对象的层级的不确定,因此二者的深度比较是基于递归实现的。
  2. 判断对象o1和o2的类型如果不同,直接返回false
  3. 判断如果o2和o2如果是非对象,判断值是否相同
  4. 循环对象o1或者o2,继续完成递归的深度比较
  5. 全局使用一个tmp表示是否是相同的。

总结

通过上面深度比较的介绍和实现过程,大家肯定已经比较清楚了深度比较的设计和实际原理,大家下多多练习和实践,一定可以更加熟练的掌握相关的知识点。谢谢大家的支持,有什么疑问可以评论。