對比兩個複雜的對象是否完全相等

對象的複雜程度

{
	attr1:{a:1,b:2},
	attr2:'aaa',
	attr3:[1,2,3],
	attr4:[{abc:1,bcd:34,cd:'lalla'},{abc:134,bcd:55,cd:'lekif'}]
	.....
}

不考慮對象key的順序

  • 實現代碼
diffObject(obj1, obj2) {
    if (!(obj1 instanceof Object) || !(obj2 instanceof Object)) {/*  判斷不是對象  */
      return obj1 === obj2;
    }

    if (Object.keys(obj1).length !== Object.keys(obj2).length) {
      return false;
    }

    for (var attr in obj1) {
      if (obj1[attr] instanceof Array && obj2[attr] instanceof Array) {
        if (obj1[attr].length !== obj2[attr].length) {
          return false;
        }
        for (let i = 0; i < obj1[attr].length; i++) {
          if (!JSON.stringify(obj2[attr]).includes(JSON.stringify(obj1[attr][i]))) {
            return false;
          }
        }
      } else {
        var t1 = obj1[attr] instanceof Object;
        var t2 = obj2[attr] instanceof Object;
        if (t1 && t2) {
          let result = this.diffObject(obj1[attr], obj2[attr]);
          if (!result)
            return false;
        } else if (obj1[attr] !== obj2[attr]) {
          return false;
        }
      }
    }
    return true;
  }

若有更好方法歡迎分享~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章