js怎么判斷兩個對象相等?


ES6 中有一個方法判斷兩個對象是否相等,這個方法判斷是兩個對象引用地址是否一致

let obj1= {
	a: 1
}
let obj2 = {
	a: 1
}
console.log(Object.is(obj1, obj2)) // false
let obj3 = obj1
console.log(Object.is(obj1, obj3)) // true
console.log(Object.is(obj2, obj3)) // fals

當需求是比較兩個對象內容是否一致時就沒用了
想要比較兩個對象內容是否一致,思路是要遍歷對象的所有鍵名和鍵值是否都一致:
1、判斷兩個對象是否指向同一內存
2、使用 Object.getOwnPropertyNames 獲取對象所有鍵名數組
3、判斷兩個對象的鍵名數組是否相等
4、遍歷鍵名,判斷鍵值是否都相等

let obj1 = {
	a: 1,
	b: {c: 2}
}
let obj2 = {
	b: {c: 3},
	a: 1
}
function isObjectValueEqual(a, b) {
	// 判斷兩個對象是否指向同一內存,指向同一內存返回 true
	if (a === b) return true // 獲取兩個對象鍵值數組
	let aProps = Object.getOwnPropertyNames(a)
	let bProps = Object.getOwnPropertyNames(b)
	// 判斷兩個對象鍵值數組長度是否一致,不一致返回 false
	if (aProps.length !== bProps.length) return false // 遍歷對象的鍵值
	for (let prop in a) {
		// 判斷 a 的鍵值,在 b 中是否存在,不存在,返回 false
		if (b.hasOwnProperty(prop)) {
		// 判斷 a 的鍵值是否為對象,是則遞歸,不是對象直接判斷鍵值是否相等,不相等返回 false
			if (typeof a[prop] === 'object') {
				if (!isObjectValueEqual(a[prop], b[prop])) return false
			} else if (a[prop] !== b[prop]) {
				return false
			}
		} else {
			return false
		}
	}
	return true
}
console.log(isObjectValueEqual(obj1, obj2)) // false


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM