Guest User

Untitled

a guest
Jul 20th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.40 KB | None | 0 0
  1. Array.diff = function(left, right)
  2. {
  3. var o = left;
  4. var n = right;
  5.  
  6. var ns = {};
  7. var os = {};
  8.  
  9. for (var i = 0; i < n.length; i++) {
  10. if (ns[n[i]] == null)
  11. ns[n[i]] = { rows: [], o: null };
  12. ns[n[i]].rows.push(i);
  13. }
  14.  
  15. for (var i = 0; i < o.length; i++) {
  16. if (os[o[i]] == null)
  17. os[o[i]] = { rows: [], n: null };
  18. os[o[i]].rows.push(i);
  19. }
  20.  
  21. for (var i in ns) {
  22. if (ns[i].rows.length == 1 && typeof(os[i]) != "undefined" && os[i].rows.length == 1) {
  23. n[ns[i].rows[0]] = { text: n[ns[i].rows[0]], row: os[i].rows[0] };
  24. o[os[i].rows[0]] = { text: o[os[i].rows[0]], row: ns[i].rows[0] };
  25. }
  26. }
  27.  
  28. for (var i = 0; i < n.length - 1; i++) {
  29. if (n[i].text != null && n[i + 1].text == null && n[i].row + 1 < o.length && o[n[i].row + 1].text == null && n[i + 1] == o[n[i].row + 1]) {
  30. n[i + 1] = { text: n[i + 1], row: n[i].row + 1 };
  31. o[n[i].row + 1] = { text: o[n[i].row + 1], row: i + 1 };
  32. }
  33. }
  34.  
  35. for (var i = n.length - 1; i > 0; i--) {
  36. if (n[i].text != null && n[i - 1].text == null && n[i].row > 0 && o[n[i].row - 1].text == null &&
  37. n[i - 1] == o[n[i].row - 1]) {
  38. n[i - 1] = { text: n[i - 1], row: n[i].row - 1 };
  39. o[n[i].row - 1] = { text: o[n[i].row - 1], row: i - 1 };
  40. }
  41. }
  42.  
  43. return { left: o, right: n };
  44. }
Add Comment
Please, Sign In to add comment