Advertisement
Anatolyukropov

Object deep equal

Oct 26th, 2020 (edited)
303
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Object.compare = function (obj1, obj2) {
  2.   // Цикл через свойства объекта obj1
  3.   for (var p in obj1) {
  4.     //Проверка на то, что оба объекта существуют
  5.     if (obj1.hasOwnProperty(p) !== obj2.hasOwnProperty(p)) return false;
  6.  
  7.     switch (typeof (obj1[p])) {
  8.       // Глубокое сравнение объектов по ключам и значения:
  9.       case 'objectId':
  10.     if(obj1[p].toString() !== obj2[p]).toString()) return false;
  11.     break;
  12.       case 'object':
  13.         if (!Object.compare(obj1[p], obj2[p])) return false;
  14.         break;
  15.       // Сравнение данных типа function:
  16.       case 'function':
  17.         if (typeof (obj2[p]) == 'undefined' || (p != 'compare' && obj1[p].toString() != obj2[p].toString())) return false;
  18.         break;
  19.       // Сравнение значений:
  20.       default:
  21.         if (obj1[p] != obj2[p]) return false;
  22.     }
  23.   }
  24.  
  25.   // Проверка объекта obj2 на дополнительные свойства:
  26.   for (var p in obj2) {
  27.     if (typeof (obj1[p]) == 'undefined') return false;
  28.   }
  29.   return true;
  30. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement