如何比较包含循环对象的JavaScript对象

如何比较包含循环对象的JavaScript对象,javascript,Javascript,请告诉我比较包含循环对象的JavaScript对象 如下所示,返回true,因为a1等于a2 a1 = {} a1.b = 1 a1.c = 2 a1.d = a a2 = {} a2.b = 1 a2.c = 2 a2.d = a2 如下所示,返回false,因为a1不等于a2 a1 = {} a1.b = 1 a1.c = 2 a1.d = a a2 = {} a2.b = 1 a2.c = 2 a2.d = a2 a2.e = a2 试试这个 编写了一个符合您需要的比较器函

请告诉我比较包含循环对象的JavaScript对象

如下所示,返回true,因为a1等于a2

a1   = {}
a1.b = 1
a1.c = 2
a1.d = a

a2 = {}
a2.b = 1
a2.c = 2
a2.d = a2
如下所示,返回false,因为a1不等于a2

a1   = {}
a1.b = 1
a1.c = 2
a1.d = a

a2 = {}
a2.b = 1
a2.c = 2
a2.d = a2
a2.e = a2
试试这个


编写了一个符合您需要的
比较器
函数。但是,它有一个限制,第一个参数应该比第二个参数具有更多的属性。我可以在
函数中切换它们,但我不认为为此创建临时对象是好的。
此外,在以下情况下,它将返回
false

a1.d = a2
a2.d = a1
告诉我你是否也需要处理那个案子。

编辑:我刚想到,在比较循环对象时,您总是会遇到堆栈大小异常,因此您可以
尝试捕获此异常,但它可能会有不好的性能。

你如何比较这两个物体?@Sushil这是他的问题我弄错了question@Sushil是的,比较这两个Objects.JSON无法表示递归数据。你没有JSON。这些是JavaScript对象。
RangeError:超出了最大调用堆栈大小
。我猜,OP有一个输入错误:
a1.d=a1
@ArtyomNeustroev Fixed checkfiddler@Suhil现在它返回
false
,但在这种情况下,它意味着返回
true
false
可以通过简单的
=
比较来实现。OP想要得到
true
@ArtyomNeustroev如果两个对象具有相同的属性,我的解决方案将返回true谢谢,对不起。我正在开发测试工具。它的概念是“没有编码测试,JavaScript的测试自动化”。这就是为什么我需要比较它们,但我保留了一次。
a1.d = a2
a2.d = a1