Lodash isEqual терпит неудачу из-за конструктора, определенного angular

Я использую Lodash _.isEqual to deep-сравнить локальный объект javascript с другим объектом javascript, полученным через angular $get.

Этот код говорит, что объекты разные:

$get({...}, function (data) {

  cleanupAngularProps(data);

  if (_.isEqual(data, {name: 'Someone'}) {
    ...
  }
});

но chaging его немного следующим образом, теперь он говорит, что они равны (как и ожидалось):

$get({...}, function (data) {

  cleanupAngularProps(data);

  if (_.isEqual(JSON.parse(JSON.stringify(data)), {name: 'Someone'}) {
    ...
  }
});

Я отладил код Lodash, и, похоже, это не удалось, потому что оба объекта имеют разные конструкторы.

Как решить эту проблему без клонирования данных?

1 ответ

  1. Я не уверен, что это хорошая практика, но я решил ее, сбросив прототип, следовательно, конструктор.

    $get({...}, function (data) {
    
      cleanupAngularProps(data);
    
      data.__proto__ = Object.prototype;
    
      if (_.isEqual(data, {name: 'Someone'}) {
        ...
      }
    });