关于两个json比较 是否相等

2016-10-25  本文已影响252人  black白先森
    /*比较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不同
上一篇 下一篇

猜你喜欢

热点阅读