这几天做公司项目,保存字段的时候,变更前,变更后,哪些字段变更了,都变更了什么内容
这里 我用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;
-
}
-
//比较结束