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

祝大家在金三銀四的面試中取得滿意的結果!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章