Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Array.diff = function(left, right)
- {
- var o = left;
- var n = right;
- var ns = {};
- var os = {};
- for (var i = 0; i < n.length; i++) {
- if (ns[n[i]] == null)
- ns[n[i]] = { rows: [], o: null };
- ns[n[i]].rows.push(i);
- }
- for (var i = 0; i < o.length; i++) {
- if (os[o[i]] == null)
- os[o[i]] = { rows: [], n: null };
- os[o[i]].rows.push(i);
- }
- for (var i in ns) {
- if (ns[i].rows.length == 1 && typeof(os[i]) != "undefined" && os[i].rows.length == 1) {
- n[ns[i].rows[0]] = { text: n[ns[i].rows[0]], row: os[i].rows[0] };
- o[os[i].rows[0]] = { text: o[os[i].rows[0]], row: ns[i].rows[0] };
- }
- }
- for (var i = 0; i < n.length - 1; i++) {
- 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]) {
- n[i + 1] = { text: n[i + 1], row: n[i].row + 1 };
- o[n[i].row + 1] = { text: o[n[i].row + 1], row: i + 1 };
- }
- }
- for (var i = n.length - 1; i > 0; i--) {
- if (n[i].text != null && n[i - 1].text == null && n[i].row > 0 && o[n[i].row - 1].text == null &&
- n[i - 1] == o[n[i].row - 1]) {
- n[i - 1] = { text: n[i - 1], row: n[i].row - 1 };
- o[n[i].row - 1] = { text: o[n[i].row - 1], row: i - 1 };
- }
- }
- return { left: o, right: n };
- }
Add Comment
Please, Sign In to add comment