JS面試題之比較兩個對象是否相等?

這是我在一次面試中,被面試官所提問的一道題

在此次面試題中面試

相等:指的是對象的屬性個數值相等

有這樣兩個obj數組

let obj1 = {
    name:'李德華',
    age:18,
    price:NaN
}

let obj2 = {
    name:'張德華',
    age:18,
    price:NaN
}

我能想到的一種方案code

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對象

祝你們在金三銀四的面試中取得滿意的結果!
相關文章
相關標籤/搜索