js比较俩个对象是否相等

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

let bankInfo = {
    accountType : 2,
    nationality:'CHN',	//国籍
	bankName : '',		//银行名称
	bankCode : '',		//银行code
}
let oldBankInfo = {
    accountType : 2,
    nationality:'CHN',	//国籍
	bankName : '',		//银行名称
	bankCode : '',		//银行code
}

let flag2 = JSON.stringify(bankInfo) == JSON.stringify(oldBankInfo)
console.log(flag2) // true

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

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

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

checkInfo() {
    // object.keys
    let bankInfo = Object.keys(this.params.bankInfo),
        oldBankInfo = Object.keys(this.params.oldBankInfo)
    if (oldBankInfo.length !== bankInfo.length) return false
    for (let i = 0; i <= bankInfo.length - 1; i++) {
	    let key = bankInfo[i];
	    if (!oldBankInfo.includes(key)){
            return false
        } 
	    if (this.params.oldBankInfo[key] !== this.params.bankInfo[key]){
            return false
        } 
	}

    // object.entries
    console.log(Object.entries(this.params.bankInfo).toString() === Object.entries(this.params.oldBankInfo).toString()) //true
    console.log(Object.entries(this.params.bankInfo).toString())  //accountType,2,nationality,CHN,bankName,,bankCode,
    console.log(Object.entries(this.params.oldBankInfo).toString()) //accountType,2,nationality,CHN,bankName,,bankCode,

}

三、使用Object.getOwnPropertyNames()

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

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

详见博客:

Object.keys()和Object.getOwnPropertyNames()有什么区别 - web开发 - 亿速云

checkInfo(obj1, obj2){
    //指向同一内存
    if (obj1 === obj2) return true;
    let bankInfo = Object.getOwnPropertyNames(obj1),
        oldBankInfo = Object.getOwnPropertyNames(obj2)
    //判断属性值是否相等
    if(bankInfo.length == oldBankInfo.length) return false

	for(let i=0,max=bankInfo.length; i<max; i++){
		let prop_name = bankInfo[i]
		if(obj1[prop_name] !== obj2[prop_name]){
			return false
		}
	}
	return true
}

今天的分享就到这里,如有错误欢迎指出。谢谢大家~

猜你喜欢

转载自blog.csdn.net/codingLeader/article/details/123232737