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