這是我在一次面試中,被面試官所提問的一道題
在這次面試題中
相等:指的是對象的屬性個數值相等
有這樣兩個obj
let obj1 = {
name:'李德華',
age:18,
price:NaN
}
let obj2 = {
name:'張德華',
age:18,
price:NaN
}
我能想到的一種方案
function compare(obj1,obj2){
if(Object.keys(obj1).length != Object.keys(obj2).length){
return false
}else{
for(key in obj1){
if(obj2.hasOwnProperty(key)){
if( !Object.is(obj1[key],obj2[key])){
return false;
}
}else{
return false
}
}
return true
}
}
解答過程的思考
- 由於obj沒有length,我只能通過Object.keys()轉化成數組
- 進入第二步,對象中的屬性在另一個obj中是否存在。此處使用了Object.hasOwnProperty() 僅對該對象中的屬性進行對比(避免obj繼承了父級的屬性)
- 承載第二步的基礎對屬性值進行比對。ES6中Object.is()來避免出現NaN不等於自身的問題
或者使用 Underscore.js中的_.isEqual
祝大家在金三銀四的面試中取得滿意的結果!