【发布时间】:2016-12-04 15:16:48
【问题描述】:
我正在使用 lodash isEqual 函数来深入比较 JavaScript 对象。它要求对象具有相同的原型才能被视为相等,如下面的节点 REPL 会话所示:
> 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({a: 3}) === JSON.stringify(new Foo(3)); -
那行不通。大多数浏览器会给
JSON.stringify({a:1, b:2})和JSON.stringify({b:2, a:1})提供不同的结果。
标签: javascript underscore.js lodash