今天在項目開發中遇到一個沒遇到過的問題,這個問題是需要對比兩個對象a和b,a是一個只有一個屬性的對象,b是一個含有多個屬性對象,如果b中包含和a一模一樣的屬性名和值,則把這個一樣的屬性和值從b中刪除了。例如給的兩個對象是以下類型:
let a= { '場次':{id: '0',value: '周五'} } let b= { '場次':{id: '0',value: '周五'}, '票種':{id: '0',value: 'VIP'}, }
問題:
1::如何比較a和b對象?
因為a只是一個對象,而b是一個對象集。所以我們首先需要知道b中有沒有這個對象,這里我們需要用到Object.keys這個方法。
Object.keys方法是JavaScript中用於遍歷對象屬性的一個方法 。它傳入的參數是一個對象,返回的是一個數組,數組中包含的是該對象所有的屬性名。
const key = Object.keys(a)[0]
因為a對象只有一個屬性值,所以我們Object.keys(a)[0]作為比較的屬性名,然后我們比較具體的屬性值,這里以id為標准。
2:如何讀取屬性名為中文字符串的對象?
這里我們需要知道JavaScript訪問對象屬性用點號和中括號的區別:
點號后加標識符(靜態的)
中括號放字符串,字符串可以是動態的,obj['string'+variable]
所以在這里我們可以這里得到屬性值:
const valobj = b[key]
3:如何刪除?
這里我們需要知道delect操作符:
它可以從一個對象中徹底刪除一個屬性
當我們有值相同的時候,就可以刪除這個屬性和值
if(valobj && valobj.id === a[key].id){ delete b[key] }
全部代碼:
let a = { '場次':{id: '0',value: '周五'} } let b = { '場次':{id: '0',value: '周五'}, '票種':{id: '0',value: 'VIP'}, } const key = Object.keys(a)[0]; const valobj = b[key] if(valobj && valobj.id === a[key].id){ delete b[key] console.log(b) }