我有2个大对象要比较。我想知道他们是否平等
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分钟后关闭不响应的标签。怎么解决这个问题?
答案 0 :(得分:1)
使用Lodash isEqual
为您执行此操作。
答案 1 :(得分:-1)
我想提供我的解决方案。请尝试使用您的JSON对象。 为了检查对象是否具有可以使用的不同数量的字段
Object.keys(ar1)。length!== Object.keys(ar2)。length
function isEqual(ar1, ar2) {
if((ar1 === null) && (ar2 === null))
return true;
//console.info("Type: " + typeof ar1 + ":" + typeof ar2)
if (typeof ar1 !== typeof ar2) {
return false;
}
console.info("Length: " + ar1.length + ":" + ar2.length)
if (ar1.length !== ar2.length) {
return false;
}
if((typeof ar1 === 'object') && (typeof ar2 === 'object') && (Object.keys(ar1).length !== Object.keys(ar2).length))
return false;
if ((typeof ar1 !== 'object') && (typeof ar2 !== 'object')) {
//console.info("Value is not equal: " + (ar1 !== ar2))
if (ar1 !== ar2)
return false;
else
return true;
}
for (var i in ar1) {
//console.info("Values:" + ar1[i] + ":" + ar2[i])
if (!isEqual(ar1[i], ar2[i])) {
return false;
}
}
return true;
}
var obj1 = {
a : 1,
b :[1, 2, 3],
c: {a:1}
};
var obj2 = {
a : 1,
b : [1, 2, 3],
c: {a:1},
d:1
};
isEqual(obj1, obj2)