Я использую функцию lodash isEqual
для глубокого сравнения объектов JavaScript. Это требует объектов, чтобы иметь одни и те же прототип считаются равным, а на следующую сессию с узлом РЕПЛ показывает:Проверка js глубокого равенства без учета прототипов (желательно в lodash)
> const isEqual = require('lodash').isEqual
undefined
> isEqual({a:3},{a:3})
true
> class Foo { constructor(x) {this.a = x} }
[Function: Foo]
> isEqual(new Foo(3), new Foo(3))
true
> isEqual({a:3}, new Foo(3))
false
Есть простой способ сделать глубокое сравнение прототипов не учитывая? Он должен по-прежнему проводить специальное сравнение для дат; Я просто хочу, в случаях, когда lodash будет делать рекурсивное сравнение, что неважно, отличаются ли прототипы. Очевидно, я мог бы сам его закодировать, но я использовал lodash, чтобы не делать этого. Я также думал о том, чтобы делать
isEqual(JSON.parse(JSON.stringify(obj1)), JSON.parse(JSON.stringify(obj2)))
Возможно, все в порядке, но кажется грубым.
Вы можете просто использовать 'JSON.stringify ({а: 3}) === JSON.stringify (новый Foo (3)) 'в последнем примере; – user3335966
Это не работает. Большинство браузеров дадут разные результаты для 'JSON.stringify ({a: 1, b: 2})' и 'JSON.stringify ({b: 2, a: 1})'. – gmr