递归循环比较两个对象是否相等,key不按顺序也可以

76 阅读1分钟

递归循环判断两个对象是否相等,对象值相等即可,对象key顺序可忽略 及:{a:1,b:2}==={b:2,a:1}

具体需要如下:

递归循环判断两个对象是否相等,对象值相等即可,对象key顺序可忽略 及:{a:1,b:2}==={b:2,a:1};

'100'与100相等;

'100.00' 与'100'相等;

null,undefined,'' 相等;

用递归实现的方法

贴代码啦~—~

    function deepEqual(obj1, obj2) {

       if (obj1 === obj2) return true

       // 比较 '100'与100
       if ((typeof obj1 === 'number' && typeof obj2 === 'string') 
           ||(typeof obj1 === 'string' && typeof obj2 === 'number')) {

           if (parseFloat(obj1) === parseFloat(obj2)) return true

       }

       // 比较 '100.00' 与'100'
       if (!isNaN(obj1) && !isNaN(obj2) && parseFloat(obj1) 
           === parseFloat(obj2)) return true

       // 比较 undefined 与''
       if ([null, undefined, ''].includes(obj1) 
           && [null, undefined, ''].includes(obj2)) return true

       // null,undefined,'' 相等

       if (typeof obj1 !== 'object' 
           || typeof obj2 !== 'object' 
           || obj1 === null 
           || obj2 === null) {

           return false

       }


       const keys1 = Object.keys(obj1).sort()

       const keys2 = Object.keys(obj2).sort()


       if (keys1.length !== keys2.length) return false


       for (let i = 0; i < keys1.length; i++) {

           if (keys1[i] !== keys2[i]) return false

           if (!deepEqual(obj1[keys1[i]], obj2[keys2[i]])) return false

       }

       return true

  }

如果还有其他情况可以继续优化方法...