js比较俩个对象是否相等

| |
[不指定 2023/08/28 15:20 | by 刘新修 ]

一、使用Object.getOwnPropertyNames()

该方法和Object.keys()功能一样,不同的地方在于Object.getOwnPropertyNames返回对象本身全部的属性,而Object.keys返回对象自身的(不含继承的)所有可枚举属性(不含Symbol属性)(即返回enumerable为false的属性)

共同点是俩者都不会返回自身原型链上的属性。

JavaScript代码
  1. var obj = {"name":"liuxinxiu","age":18,"info":"1234"}  
  2. var obj2 = obj;  
  3. var obj3 = {"name":"liuxinxiu","age":18,"info":"123"}  
  4. function checkInfo(obj1, obj2){  
  5.     //判断是否指向同一内存  
  6.     if (obj1 === obj2) return true;  
  7.     let bankInfo = Object.getOwnPropertyNames(obj1),  
  8.         oldBankInfo = Object.getOwnPropertyNames(obj2)  
  9.   
  10.     //判断长度不相同直接返回不同  
  11.     if(bankInfo.length !== oldBankInfo.length) return false  
  12.    
  13.     for(let i=0,max=bankInfo.length; i<max; i++){  
  14.         let prop_name = bankInfo[i]  
  15.         if(obj1[prop_name] !== obj2[prop_name]){  
  16.             return false  
  17.         }  
  18.     }  
  19.     return true  
  20. }  
  21. console.log(checkInfo(obj,obj3))  

二、使用Object.keys()或者Object.entries().toString()

Object.keys()是将对象中键先取出来组成数组,然后先比较键。而后通过键在比较值

Object.entries()是将键和值分别组成俩个数组。然后使用toString将键值数组转化为字符串去比较

JavaScript代码
  1.    
  2. checkInfo() {  
  3.     // object.keys  
  4.     let bankInfo = Object.keys(this.params.bankInfo),  
  5.         oldBankInfo = Object.keys(this.params.oldBankInfo)  
  6.     if (oldBankInfo.length !== bankInfo.length) return false  
  7.     for (let i = 0; i <= bankInfo.length - 1; i++) {  
  8.         let key = bankInfo[i];  
  9.         if (!oldBankInfo.includes(key)){  
  10.             return false  
  11.         }   
  12.         if (this.params.oldBankInfo[key] !== this.params.bankInfo[key]){  
  13.             return false  
  14.         }   
  15.     }  
  16.    
  17.     // object.entries  
  18.     console.log(Object.entries(this.params.bankInfo).toString() === Object.entries(this.params.oldBankInfo).toString()) //true  
  19.     console.log(Object.entries(this.params.bankInfo).toString())  //accountType,2,nationality,CHN,bankName,,bankCode,  
  20.     console.log(Object.entries(this.params.oldBankInfo).toString()) //accountType,2,nationality,CHN,bankName,,bankCode,  
  21.    
  22. }  

三、使用JSON.stringify()或。适用于俩个对象属性顺序相同

JavaScript代码
  1. let bankInfo = {  
  2.     accountType : 2,  
  3.     nationality:'CHN',  //国籍  
  4.     bankName : '',      //银行名称  
  5.     bankCode : '',      //银行code  
  6. }  
  7. let oldBankInfo = {  
  8.     accountType : 2,  
  9.     nationality:'CHN',  //国籍  
  10.     bankName : '',      //银行名称  
  11.     bankCode : '',      //银行code  
  12. }  
  13.    
  14. let flag2 = JSON.stringify(bankInfo) == JSON.stringify(oldBankInfo)  
  15. console.log(flag2)  

 

H5/JS/CSS | 评论(0) | 引用(0) | 阅读(354)