1. 程式人生 > >JSON字串對比,JSON陣列比較

JSON字串對比,JSON陣列比較

這幾天做公司專案,儲存欄位的時候,變更前,變更後,哪些欄位變更了,都變更了什麼內容

這裡 我用json字串 對比  然後拼接成json,插入記錄表的......................

不好勿噴。

另外 json陣列的對比 我是寫死的,也就是這個方法 CompareObjJson  這個可以寫成活的嗎?有高手指點一下嗎?

話不多說,直接上程式碼。。。

  1. /////比對

  2. ///objA獲取頁面的值 objB繫結值

  3. Compare: function (objB,objA) {

  4. var str;

  5. if (!$.AssetOperation.isObj(objA) || !$.AssetOperation.isObj(objB)) {

  6. str = $.AssetOperation.CompareObjJson(objA, objB);

  7. } else {

  8. str = $.AssetOperation.CompareObj(objA, objB, true);//預設為true

  9. }

  10. return str;

  11. },

  12. CompareObj: function (objA, objB, flag) {

  13. var v = new Array();

  14. for (var key in objA) {

  15. var val = {};

  16. if (!flag) //跳出整個迴圈

  17. break;

  18. if (!objB.hasOwnProperty(key)) { flag = false; break; }

  19. if (!$.AssetOperation.isArray(objA[key])) { //子級不是陣列時,比較屬性值

  20. //console.log(objB[key]);

  21. if (objB[key] != objA[key]) {

  22. val.AssetID = 1;

  23. val.FieldName = key;

  24. val.BeforeText = objB[key];

  25. val.AfterText = objA[key];

  26. if ((objB[key] == "" || objB[key] == null || objB[key] == undefined)) {

  27. if ((objA[key] != "" & objA[key] != null & objA[key] != undefined)) {

  28. val.Operation = "新增";

  29. v.push(val);

  30. }

  31. } else {

  32. val.Operation = "編輯";

  33. v.push(val);

  34. }

  35. }

  36. } else {

  37. if (!$.AssetOperation.isArray(objB[key])) { flag = false; break; }

  38. var oA = objA[key], oB = objB[key];

  39. for (var k in oA) {

  40. if (!flag) //這裡跳出迴圈是為了不讓遞迴繼續

  41. break;

  42. flag = CompareObj(oA[k], oB[k], flag);

  43. }

  44. }

  45. }

  46. return v;

  47. },

  48. //[{ "FieldID": 14, "SetValue": "28" }]

  49. //[{ "FieldID": "12", "SetValue": "1" }, { "FieldID": "13", "SetValue": "1" }, { "FieldID": "14", "SetValue": "29" }, { "FieldID": "16", "SetValue": "36" }]

  50. CompareObjJson: function (objA, objB) {

  51. var v = new Array();

  52. for (var i = 0; i < objA.length; i++) {

  53. for (var j = 0; j < objB.length; j++) {

  54. var val = {};

  55. if (objB[j].FieldID == objA[i].FieldID) { //判斷FieldID是否相等

  56. if (objB[j].SetValue != objA[i].SetValue) { //FieldID相等的時候,判斷SetValue值是否相等

  57. //不等於是編輯,儲存原始值與現在修改的值

  58. val.AssetID = 1;

  59. val.FieldName = objB[j].FieldID;

  60. val.BeforeText = objA[i].SetValue;

  61. val.AfterText = objB[j].SetValue;

  62. val.Operation = "編輯";

  63. v.push(val);

  64. }

  65. } else {

  66. //新增

  67. //新增的時候等於空什麼都不記錄,不等於空的時候去記錄資料

  68. val.AssetID = 2;

  69. val.FieldName = objB[j].FieldID;

  70. val.BeforeText = "";

  71. val.AfterText = objB[j].SetValue;

  72. val.Operation = "新增";

  73. if (objB[j].SetValue != "" && objB[j].SetValue != null && objB[j].SetValue!=undefined){

  74. v.push(val);

  75. }

  76. }

  77. }

  78. }

  79. return v;

  80. },

  81. isObj: function (object) {

  82. return object && typeof (object) == 'object' && Object.prototype.toString.call(object).toLowerCase() == "[object object]";

  83. },

  84. isArray: function (object) {

  85. return object && typeof (object) == 'object' && object.constructor == Array;

  86. }

  87. //比較結束