我有两个比较大的对象。我想知道它们是否相等。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/

10-10 18:15