JSON字符串对比,JSON数组比较

这几天做公司项目,保存字段的时候,变更前,变更后,哪些字段变更了,都变更了什么内容

这里 我用json字符串 对比  然后拼接成json,插入记录表的......................

不好勿喷。

另外 json数组的对比 我是写死的,也就是这个方法 CompareObjJson  这个可以写成活的吗?有高手指点一下吗?

话不多说,直接上代码。。。


  /比对
    ///objA获取页面的值 objB绑定值
    Compare: function (objB,objA) {
        var str;
        if (!$.AssetOperation.isObj(objA) || !$.AssetOperation.isObj(objB)) {
            str = $.AssetOperation.CompareObjJson(objA, objB);
        } else {
            str = $.AssetOperation.CompareObj(objA, objB, true);//默认为true
        } 
        return str;
    },
    CompareObj: function (objA, objB, flag) {
        var v = new Array();
        for (var key in objA) {
            var val = {};
            if (!flag) //跳出整个循环
                break;
            if (!objB.hasOwnProperty(key)) { flag = false; break; }
            if (!$.AssetOperation.isArray(objA[key])) { //子级不是数组时,比较属性值
                //console.log(objB[key]);
                if (objB[key] != objA[key]) {
                    val.AssetID = 1;
                    val.FieldName = key;
                    val.BeforeText = objB[key];
                    val.AfterText = objA[key];
                    if ((objB[key] == "" || objB[key] == null || objB[key] == undefined)) {
                        if ((objA[key] != "" & objA[key] != null & objA[key] != undefined)) {
                            val.Operation = "新增";
                            v.push(val);
                        }
                    } else {
                        val.Operation = "编辑";
                        v.push(val);
                    }
                }
            } else {
                if (!$.AssetOperation.isArray(objB[key])) { flag = false; break; }
                var oA = objA[key], oB = objB[key];
                for (var k in oA) {
                    if (!flag) //这里跳出循环是为了不让递归继续
                        break;
                    flag = CompareObj(oA[k], oB[k], flag);
                }
            }
        }
        return v;
    },
    //[{ "FieldID": 14, "SetValue": "28" }]
    //[{ "FieldID": "12", "SetValue": "1" }, { "FieldID": "13", "SetValue": "1" }, { "FieldID": "14", "SetValue": "29" }, { "FieldID": "16", "SetValue": "36" }]
    CompareObjJson: function (objA, objB) {
        var v = new Array();
        for (var i = 0; i < objA.length; i++) {
            for (var j = 0; j < objB.length; j++) {
                var val = {};
                if (objB[j].FieldID == objA[i].FieldID) { //判断FieldID是否相等
                    if (objB[j].SetValue != objA[i].SetValue) { //FieldID相等的时候,判断SetValue值是否相等
                        //不等于是编辑,保存原始值与现在修改的值
                        val.AssetID = 1;
                        val.FieldName = objB[j].FieldID;
                        val.BeforeText = objA[i].SetValue;
                        val.AfterText = objB[j].SetValue;
                        val.Operation = "编辑";
                        v.push(val);
                    } 
                } else {
                    //新增
                    //新增的时候等于空什么都不记录,不等于空的时候去记录数据
                    val.AssetID = 2;
                    val.FieldName = objB[j].FieldID;
                    val.BeforeText = "";
                    val.AfterText = objB[j].SetValue;
                    val.Operation = "新增";
                    if (objB[j].SetValue != "" && objB[j].SetValue != null && objB[j].SetValue!=undefined){
                        v.push(val);
                    }
                }
            }
        }
        return v;
    },
    isObj: function (object) {
        return object && typeof (object) == 'object' && Object.prototype.toString.call(object).toLowerCase() == "[object object]";
    },
    isArray: function (object) {
        return object && typeof (object) == 'object' && object.constructor == Array;
    }
  //比较结束


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值