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;
-
}
-
//比較結束