美文网首页
测试检查两个对象的属性值是否相同(不只判断相等)

测试检查两个对象的属性值是否相同(不只判断相等)

作者: 笨小孩81 | 来源:发表于2020-12-18 10:39 被阅读0次

通常情况下JS要 obj1 === obj2 是检查两个变量所指向的对象是否相同,如果我们要检查两个不同的对象的所有属性值是否相等,用obj1 === obj2是不行的,这个时候就要遍历两个对象的所有属性是否相等,遇到对象属性是数组或者对象的情况就需要进行递归检查,上代码:

testObjSame (obj1, obj2) {
     // debugger
      if (obj1 === obj2) {// 常规情况
        return true
      }
    //  对象转json字符对比相同则肯定对象值相同这里可以过滤大部分情况
      if (JSON.stringify(obj1) === JSON.stringify(obj2)) {
        return true
      }
      const keys1 = Object.keys(obj1)
      const keys2 = Object.keys(obj2)
      if (keys1.length !== keys2.length) {// 属性字段列表长度不一致则肯定不相同
        return false
      }
      const kset = new Set([...keys1, ...keys2])
      const keys3 = Array.from(kset)// 长度相同的情况下取并集
      if (keys3.length !== keys2.length) {// 并集多于或者少于原始的则对象不相同
        return false
      }
      // 遍历属性
      for (let i = 0; i < keys3.length; i++) {
        const k = keys3[i];
        const o1 = obj1[k]
        const o2 = obj2[k]
        // 如果是对象(数组也是对象)则递归判断,这里没有考虑function的情况
        if (typeof o1 === 'object' && typeof o2 === 'object') {
          if (!testObjSame(o1, o2)) {
            return false
          }
        } else if (o1 !== o2) {
          return false
        }
      }
      return true
    }

测试:

    const d = testObjSame({ a: 1, b: [{ a: 1, b: 2 }] }, { b: [{ b: 2, a: 2 }], a: 1 })
    console.log(d)
    const d2 = testObjSame({ a: 1, b: [{ a: 1, b: 2 }] }, { a: 1, b: [{ a: 1, b: 2 }] })
    console.log(d2)

未经严格测试,如有错误请留言。

相关文章

  • 测试检查两个对象的属性值是否相同(不只判断相等)

    通常情况下JS要 obj1 === obj2 是检查两个变量所指向的对象是否相同,如果我们要检查两个不同的对象的所...

  • 第三章 if语句

    一、条件测试 1.检查是否相等(“=”是赋值,“==”是判断值是否相等) 2.检查相等时不考虑大小写 在Pytho...

  • Dart 重写==实现对象判断

    is is 关键字为类型检查关键字 重写== 下面案例运用了is关键字,检查类型,并以判断属性值是否相等来检查对象...

  • JS如何判断俩个对象是否相等

    判断对象相等的步骤:1.先判断俩者是不是对象2.是对象后俩者长度是否一致3.判断俩个对象的所有key值是否相等相同...

  • C# 相等比较

    引用相等性 判断两个对象是否引用同一基础对象。使用 ReferenceEquals 方法判断: 值相等性 使用 =...

  • C#中的相等判断:==和equals

    在.net中,经常需要比较两个对象是否相等(值相等或者地址引用相同),而 .net(C#)中提供的相等判断有很多种...

  • kotlin学习笔记

    $ ?表示对象可能为空 ?: !! ==,=== ==判断值是否相等,===判断值及引用是否完全相等。 ..Kot...

  • es6学习-扩展对象的功能性

    更好的判断是否相等 Object.is():方法判断两个值是否是相同的值,Object.is 不会做这种类型转换。...

  • String中equals方法

    Java中使用“==”来判断两个对象是否相等是判断两个对象的引用是否相同Java中使用“equals”来判断两个对...

  • Object类中4个常用的方法一:equals()方法

    1、相等与同一如果两个对象具有相同的类型以及相同的属性值,则称这两个对象相等。如果两个引用(地址)对象指的是同一个...

网友评论

      本文标题:测试检查两个对象的属性值是否相同(不只判断相等)

      本文链接:https://www.haomeiwen.com/subject/ycdxnktx.html