derbyjs / arraydiff

Diff two arrays, finding inserts, removes, and moves
38 stars 5 forks source link

Not optimal number of diffs #3

Open vmakhaev opened 8 years ago

vmakhaev commented 8 years ago

I suppose this happens because array has repeating elements. Here is test case: https://github.com/vmakhaev/arraydiff-testcase As you see, I remove one item and expect only one RemoveDiff, but get:

[ RemoveDiff { index: 86, howMany: 1 },
  MoveDiff { from: 21, to: 20, howMany: 5 },
  MoveDiff { from: 27, to: 26, howMany: 6 },
  MoveDiff { from: 34, to: 33, howMany: 6 },
  MoveDiff { from: 41, to: 40, howMany: 6 },
  MoveDiff { from: 48, to: 47, howMany: 5 },
  MoveDiff { from: 54, to: 53, howMany: 6 },
  MoveDiff { from: 61, to: 60, howMany: 7 },
  MoveDiff { from: 70, to: 68, howMany: 8 },
  MoveDiff { from: 79, to: 68, howMany: 1 },
  MoveDiff { from: 80, to: 79, howMany: 6 } ]
rkstedman commented 7 years ago

This jsondiffpatch library seems to handle that case correctly (example)

I haven't been able to look and see what the implementation difference is but maybe we can learn from it and update the arraydiff implementation. https://github.com/benjamine/jsondiffpatch/blob/master/docs/arrays.md