obj_compare.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. function isEqual(obj1, obj2) {
  2. const keys1 = Object.keys(obj1);
  3. const keys2 = Object.keys(obj2);
  4. if (keys1.length !== keys2.length) return false;
  5. for (const key of keys1) {
  6. // if (Array.isArray(obj1[key])) {
  7. // compareArrays(obj1[key], obj2[key])
  8. // } else {
  9. if (obj1[key] !== obj2[key]) {
  10. console.log(key)
  11. }
  12. // }
  13. ;
  14. }
  15. return true;
  16. }
  17. function compareArrays(oldArray, newArray) {
  18. const oldMap = new Map(oldArray.map(item => [item.id, item]));
  19. const newMap = new Map(newArray.map(item => [item.id, item]));
  20. const added = newArray.filter(item => !oldMap.has(item.id));
  21. const deleted = oldArray.filter(item => !newMap.has(item.id));
  22. const modified = [];
  23. for (const newItem of newArray) {
  24. const oldItem = oldMap.get(newItem.id);
  25. if (oldItem) {
  26. const changes = {};
  27. let hasChange = false;
  28. for (const key in newItem) {
  29. if (!Object.is(newItem[key], oldItem[key])) {
  30. changes[key] = {old: oldItem[key], new: newItem[key]};
  31. hasChange = true;
  32. }
  33. }
  34. if (hasChange) {
  35. modified.push({id: newItem.id, changes});
  36. }
  37. }
  38. }
  39. console.log('新增:', added);
  40. console.log('删除:', deleted);
  41. console.log('修改:', modified);
  42. return {added, deleted, modified};
  43. }
  44. obj1 =[
  45. {
  46. "swi": 1920
  47. },
  48. {
  49. "wiw": 804
  50. },
  51. {
  52. "pha": 0
  53. },
  54. {
  55. "asw": 1920
  56. },
  57. {
  58. "nap": "Gecko"
  59. },
  60. {
  61. "ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36"
  62. },
  63. {
  64. "ibr": 0
  65. },
  66. {
  67. "dau": 0
  68. },
  69. {
  70. "ash": 1040
  71. },
  72. {
  73. "nps": "20030107"
  74. },
  75. {
  76. "she": 1080
  77. },
  78. {
  79. "tsd": 0
  80. },
  81. {
  82. "hz1": 429998
  83. },
  84. {
  85. "ucs": "8106"
  86. },
  87. {
  88. "ran": "0.17157431385"
  89. },
  90. {
  91. "xag": 12147
  92. },
  93. {
  94. "hal": 873811374209
  95. },
  96. {
  97. "nal": "zh-CN"
  98. },
  99. {
  100. "wih": 919
  101. },
  102. {
  103. "npl": 5
  104. },
  105. {
  106. "wow": 1920
  107. },
  108. {
  109. "wdr": 0
  110. },
  111. {
  112. "adp": "cpen:0,i1:0,dm:0,cwen:0,non:1,opc:0,fc:0,sc:0,wrc:1,isc:0,vib:1,bat:1,x11:0,x12:1"
  113. }
  114. ]
  115. obj2 = [
  116. {
  117. "asw": 1920
  118. },
  119. {
  120. "npl": 5
  121. },
  122. {
  123. "nap": "Gecko"
  124. },
  125. {
  126. "ucs": "8106"
  127. },
  128. {
  129. "wiw": 0
  130. },
  131. {
  132. "swi": 1920
  133. },
  134. {
  135. "nal": "zh-CN"
  136. },
  137. {
  138. "dau": 0
  139. },
  140. {
  141. "pha": 0
  142. },
  143. {
  144. "wdr": 0
  145. },
  146. {
  147. "ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36"
  148. },
  149. {
  150. "adp": "cpen:0,i1:0,dm:0,cwen:0,non:1,opc:0,fc:0,sc:0,wrc:1,isc:0,vib:1,bat:1,x11:0,x12:1"
  151. },
  152. {
  153. "ibr": 0
  154. },
  155. {
  156. "wih": 0
  157. },
  158. {
  159. "hz1": 429875 //
  160. },
  161. {
  162. "xag": 11891
  163. },
  164. {
  165. "hal": 873562480929
  166. },
  167. {
  168. "ash": 1040
  169. },
  170. {
  171. "she": 1080
  172. },
  173. {
  174. "tsd": 0
  175. },
  176. {
  177. "ran": "0.0113193795"
  178. },
  179. {
  180. "nps": "20030107"
  181. },
  182. {
  183. "wow": 1920
  184. }
  185. ]
  186. isEqual(obj1, obj2)