美文网首页
关于两个json比较 是否相等

关于两个json比较 是否相等

作者: black白先森 | 来源:发表于2016-10-25 15:54 被阅读252次
        /*比较obj*/
        function isObj(object) { //判断是否为对象
            return object && typeof (object) == 'object' && Object.prototype.toString.call(object).toLowerCase() == "[object object]";
            }
        function isArray(object) { // 判断是否为数组
            return object && typeof (object) == 'object' && object.constructor == Array;
        }
        function getLength(object) { // 获得对象有几个属性
            var count = 0;
            for (var i in object) count++;
            return count;
        }
        // 比较对象
        function Compare(objA, objB) {
            //if (!isObj(objA) || !isObj(objB)) return false; //判断类型是否正确
            if (getLength(objA) != getLength(objB)) return false; //判断长度是否一致
            return CompareObj(objA, objB, true);//默认为true
        }
    // 此函数可以根据自己想要的数据格式重新编写
        function CompareObj(objA, objB, flag) {
            for(var i = 0; i < objA.length; i++){
    // 因为我传进来的是数组,类似于这样的结构,所以我循环每个项
    [
        {
            "id": "85",
            "name": "e",
            "url": "baidu.com"
        },
        {
            "id": 97,
            "name": "2",
            "subMenus": [
                {
                    "id": 98,
                    "name": "2-1",
                    "url": "2-1"
                },
                {
                    "id": 99,
                    "name": "2-2",
                    "url": "2-2"
                }
            ]
        }
    ]
                var objA1 = objA[i]; // 拿到每个obj进行比较
                var objB1 = objB[i];
            // 在对每个obj的属性进行比较
                for (var key in objA1) {
                    //flag=false 跳出整个循环
                    if (!flag){ 
                        break;
                    }
                    // 判断B是否有该属性
                    if (!objB1.hasOwnProperty(key)) {
                        flag = false; 
                        break; 
                    }
                    if (!isArray(objA1[key])) { //子级不是数组时,比较属性值
                        if (objB1[key] != objA1[key]) { 
                            flag = false;
                            break; 
                        }
                    } else {    // 子集为数组时
                        if (!isArray(objB1[key])) {
                            flag = false; 
                            break;
                        }
                       // 拿到属性
                        var oA = objA1[key], oB = objB1[key];
                        if (oA.length != oB.length) {
                            flag = false; 
                            break;
                        }
                        for (var k in oA) {
                            if (!flag) //这里跳出循环是为了不让递归继续
                            break;
                            flag = CompareObj(oA[k], oB[k], flag);
                        }
                    }
                }
            }
            return flag;
        }
    最后调用
    var result = Compare(init,newData); // true相同,false不同
    

    相关文章

      网友评论

          本文标题:关于两个json比较 是否相等

          本文链接:https://www.haomeiwen.com/subject/spbruttx.html