javascript - 递归 isEqual 函数导致 Chrome 卡住

标签 javascript json google-chrome recursion

我有 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 分钟后关闭无响应的选项卡。如何解决?

最佳答案

使用 Lodash 的 isEqual 为您完成此操作。

https://lodash.com/docs/4.17.4#isEqual

关于javascript - 递归 isEqual 函数导致 Chrome 卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45919725/

相关文章:

javascript - 在 react 中将 API 调用上的数据从父容器传递到子容器

javascript - AngularJS/javascript - 将唯一值对象展平为简单列表

jquery - JavaScript 返回不起作用?返回未定义

非 RFC 3339 格式的 json 解码时间

ios - Mac和iOS Safari src播放html5视频的路径要求?

javascript - 如何将 div 移动到具有多个元素的元素中的最后一个子元素?

javascript - 如何删除上一个 .上一个对象? JavaScript .prev().remove();

javascript - ReactReducer获取有效负载:undefined

javascript - iOS 的 UIWebView 使用的 JavaScript 引擎的名称是什么?

android - android html5 视频的 chrome 黑屏