array-merge

0.0.3 • Public • Published

array-merge

3-way merging of arrays in javascript.

You just have to pass in the diffs to the original array using array-diff's format.

In the following example an optimal solution can be found as there are no edit conflicts:

var merge = require('array-merge')
var diff = require('array-diff')({unique:true})
 
var origin = [1, 2, 3, 4, 5]
var modified1 = [1, 6, 2, 3, 5, 4]
var modified2 = [1, 2, 3, 4, 7, 5]
var merged = merge.sets([diff(origin, modified1), diff(origin, modified2)])
// returns:
{result: [1, 6, 2, 3, 7, 5, 4]}

In this scenario we have order conflicts and we get the closest possible solution for each modified array:

var origin = [1, 2, 3, 4, 5]
var modified1 = [2, 6, 1, 3, 5, 4]
var modified2 = [2, 3, 1, 4, 7, 5]
var merged = merge.sets([diff(origin, modified1), diff(origin, modified2)])
// returns:
{conflict: true, result: [[2, 6, 1, 3, 7, 5, 4], [2, 6, 3, 1, 7, 5, 4]]}

We can even do n-way merges - whenever there are order conflicts the order for that specific conflict is retained in each array:

var o = [1, 2, 3, 4, 5]
var changes = [
  [2, 6, 1, 3, 5, 4],
  [2, 3, 1, 4, 7, 5],
  [1, 2, 3, 4, 5],
  [1, 8, 2, 3, 4, 5]
]
var diffs = changes.map(function(each) { return diff(o, each) })
var merged = mergeDiffs(diffs)
// returns:
{conflict: true, result: [[8,2,6,1,3,7,5,4],[8,2,6,3,1,7,5,4],[1,8,2,6,3,7,5,4],[1,8,2,6,3,7,5,4]]}

Readme

Keywords

none

Package Sidebar

Install

npm i array-merge

Weekly Downloads

5

Version

0.0.3

License

BSD

Last publish

Collaborators

  • mirkok