请告诉我比较包含循环对象的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
答案 0 :(得分:1)
试试这个jsfiddle
var a1 = {}
a1.b = 1
a1.c = 2
a1.d = a1
var a2 = {}
a2.b = 1
a2.c = 2
a2.d = a2
function isSame(a,b){
var same = true;
if(a === b){
return true;
}
for(var i in a){
if(typeof a[i] == "object" ){
if( a[i] == a){
continue;
}
same = isSame(a[i], b[i]);
if(same == false){
return same;
}
}
if(a[i] !== b[i])
return false;
}
return true
}
console.log(isSame(a1, a2) );
答案 1 :(得分:1)
编写了一个适合您需求的Comparer
函数。但是,它有一个限制,第一个参数应该具有比第二个更多的属性。我可以在function
内切换它们,但我认为为此创建临时对象并不好
此外,它将返回false
以防:
a1.d = a2
a2.d = a1
告诉我你是否也需要处理这个案子。
FIDDLE EXAMPLE
编辑:我刚才有一个想法,在比较循环对象时,你总是得到一个堆栈大小异常,所以你可以try catch
对这个异常,但它可能会表现不好。
TRY CATCH EXAMPLE