Почему _.isEqualWith () не работает должным образом? - PullRequest
1 голос
/ 23 марта 2020

Мне нужно сравнить два одинаковых объекта без свойства $$hashKey. Почему это не работает?

        var obj1 = {
            class: '',
            kind: 'nats',
            url: 'http://some.valid',
            $$hashKey: 'object:37'
        };

        var obj2 = {
            class: '',
            kind: 'nats',
            url: 'http://some.valid'
        };

        lodash.isEqualWith(obj1, obj2, function (objectValue, otherValue, key) {
            if (key === '$$hashKey') {
                return true;
            }
        });

Примечание : я не могу использовать angular.equals() для этого. Только Лода sh или Ваниль.

Ответы [ 2 ]

3 голосов
/ 23 марта 2020

Использование _.omit()

var obj1 = {
  class: '',
  kind: 'nats',
  url: 'http://some.valid',
  $$hashKey: 'object:37'
};

var obj2 = {
  class: '',
  kind: 'nats',
  url: 'http://some.valid'
};

var ommitted = ['$$hashKey']

var result = _.isEqual(
  _.omit(obj1, ommitted),
  _.omit(obj2, ommitted)
);

console.log(result);
<script src="https://cdn.jsdelivr.net/lodash/4.13.1/lodash.min.js"></script>
1 голос
/ 23 марта 2020

@ User863 получил ответ с loada sh, вот решение в простом виде js:

function checkObjEquality(obj1, obj2, keysToIgnore = []) {
  const keysObj1 = Object.keys(obj1).filter(x => !keysToIgnore.length ||
    !keysToIgnore.includes(x));

  const keysObj2 = Object.keys(obj2).filter(x => !keysToIgnore.length ||
    !keysToIgnore.includes(x));

  // There are not the same number of keyx, the objects can't be equals
  if (keysObj1.length !== keysObj2.length) {
    return false;
  }
  
  // one key of Obj1 doesn't exist in Obj2
  if (keysObj1.some(x => !keysObj2.includes(x))) {
    return false;
  }

  // Check that every key have the same value
  return keysObj1.every(x => obj1[x] === obj2[x]);
}

console.log(checkObjEquality({
  class: '',
  kind: 'nats',
  url: 'http://some.valid',
  $$hashKey: 'object:37'
}, {
  class: '',
  kind: 'nats',
  url: 'http://some.valid',
}, ['$$hashKey']));

console.log(checkObjEquality({
  class: '',
  kind: 'NOPE',
  url: 'http://some.valid',
  $$hashKey: 'object:37'
}, {
  class: '',
  kind: 'nats',
  url: 'http://some.valid',
}, ['$$hashKey']));

console.log(checkObjEquality({
  class: '',
  kind: 'nats',
  url: 'http://some.valid',
  $$hashKey: 'object:37'
}, {
  class: '',
  kind: 'nats',
}, ['$$hashKey']));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...