JS面試題之比較兩個物件是否相等?
這是我在一次面試中,被面試官所提問的一道題
在這次面試題中
相等:指的是物件的屬性個數值相等
有這樣兩個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
祝大家在金三銀四的面試中取得滿意的結果!