我有两个比较大的对象。我想知道它们是否相等。JSON.stringify(obj1) == JSON.stringify(obj2)
不起作用,因为对象是动态创建的,因此属性的顺序是随机的。
所以我写了一个isEqual()
如下。
function isEqual(ar1, ar2) {
if(ar1 !== ar2) {
if(typeof ar1 !== typeof ar2) {
return false;
}
if(ar1 == null) {
if(ar2 == null) {
return true;
}
return false;
}
if(ar2 == null) {
if(ar1 == null) {
return true;
}
return false;
}
if(typeof ar1 !== 'object') {
return false;
}
if (ar1.length !== ar2.length) {
return false;
}
for(var i in ar1) {
if(!isEqual(ar1[i], ar2[i])) {
return false;
}
}
for(var i in ar2) {
if(!isEqual(ar1[i], ar2[i])) {
return false;
}
}
}
return true;
}
现在,如果我运行
isEqual(obj1, obj2)
,则chrome中的标签会冻结,并且我无法关闭该标签。我必须等到chrome要求我大约10分钟后关闭无响应的标签页。如何解决呢? 最佳答案
使用Lodash的isEqual
为您完成此操作。
https://lodash.com/docs/4.17.4#isEqual
关于javascript - 递归isEqual函数导致Chrome卡住,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45919725/