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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40285302/article/details/82949021

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

这里 我用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. //比较结束

猜你喜欢

转载自blog.csdn.net/qq_40285302/article/details/82949021