判断两个对象是否相等java_判断两个对象的内容是否相等
由于在做鍵盤導航組件的項目時,有這樣一個需求,當用戶傳入按鍵字母和網(wǎng)址的映射時,如果和 localStorage 中的不一樣那么就用 localStorage 中存儲的,這個時候就需要比較兩個對象的內(nèi)容是否相等,但是在 JS 中對象是一種引用類型.
obj1 = {
a: 1
}
obj2 = {
a: 1
}
console.log(obj1 === obj2) // false
即使兩個對象的內(nèi)容完全相同,因為它們的地址不同,因此 obj1 === obj2 會返回 fasle。
所以自己根據(jù)深拷貝時遞歸的思想寫了一個比較兩個對象之間內(nèi)容是否相同的函數(shù)。
function compareObject (obj1, obj2) {
// 遞歸終止條件,當 obj1 或 obj2 不是對象時,此時就可以進行判斷了
if (typeof obj1 !== 'object' || typeof obj2 !== 'object') {
if (obj1 === obj2) {
return true
} else if (obj1 !== obj2) {
return false
}
}
// 獲取對象的自由屬性組成的數(shù)組
const obj1PropsArr = Object.getOwnPropertyNames(obj1)
const obj2PropsArr = Object.getOwnPropertyNames(obj2)
// 如果數(shù)組的長度不相等,那么說明對象屬性的個數(shù)都不同,返回 false
if (obj1PropsArr.length !== obj2PropsArr.length) {
return false
}
// 記錄當前 compareObject 的返回值,默認是 true
let status = true
for (key of obj1PropsArr) {
status = compareObject(obj1[key], obj2[key])
// 關(guān)鍵代碼,當 status 為 false 時下面就不用再進行判斷了,說明兩個對象的內(nèi)容并不相同
// 如果沒有下面這條語句,那么只要對象底層的內(nèi)容是相同的那么就返回 true
if (!status) {
break
}
}
// 每次 compareObject 執(zhí)行的返回結(jié)果
return status
}
測試代碼:
// 判斷兩個對象的內(nèi)容相等
const obj1 = {
a: 1,
b: {
c: 2,
d: {
e: 4
}
}
}
const obj2 = {
a: 1,
b: {
c: 2,
d: {
e: 4
}
}
}
console.log(compareObject(obj1, obj2)) // true
// 判斷兩個對象的內(nèi)容不相等
const obj1 = {
a: 1,
b: {
c: 2,
d: {
e: 4
}
}
}
const obj2 = {
a: 1,
b: {
c: 2,
d: {
e: 5
}
}
}
console.log(compareObject(obj1, obj2)) // false
接下來再來強調(diào)一下 compareObject 函數(shù)中第 23 行這句關(guān)鍵代碼,如果沒有這條語句那么最后的返回結(jié)果只會取決于兩個對象最底層屬性(最后一次)的比較結(jié)果。
if (!status) {
break
}
例如,我將兩個對象變?yōu)橄旅孢@樣:
const obj1 = {
a: 1,
b: {
c: 3, // 和 obj2 不相等
d: {
e: 4
}
}
}
const obj2 = {
a: 1,
b: {
c: 2,
d: {
e: 4
}
}
}
console.log(compareObject(obj1, obj2)) // true
可以看到最后的返回結(jié)果是 true,因為最后的一次比較是 e 屬性,它們的值是相等的。
上面這樣的寫法應(yīng)該還有一些情況沒有考慮到,對于我的項目需求而言已經(jīng)足夠了,如果哪位小伙伴發(fā)現(xiàn)了希望可以提出來,然后再將它改進一下,非常感謝。
關(guān)于找一找教程網(wǎng)
本站文章僅代表作者觀點,不代表本站立場,所有文章非營利性免費分享。
本站提供了軟件編程、網(wǎng)站開發(fā)技術(shù)、服務(wù)器運維、人工智能等等IT技術(shù)文章,希望廣大程序員努力學習,讓我們用科技改變世界。
[判斷兩個對象的內(nèi)容是否相等]http://www.zyiz.net/tech/detail-132346.html
總結(jié)
以上是生活随笔為你收集整理的判断两个对象是否相等java_判断两个对象的内容是否相等的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java import路径_Java i
- 下一篇: robo光线机器人 java_Roboc