JSFiddle - React, Tailwind, and code Playground
by Warwick Grigg
HTML
<script src="//cdn.jsdelivr.net/ramda/latest/ramda.min.js"></script>
<pre></pre>
JavaScript
var list1 = [
{ Id: 1, Date: '2015-01-01', Foo:1, Bar:2 },
{ Id: 1, Date: '2015-02-01', Foo:1, Bar:2 },
{ Id: 2, Date: '2015-01-03', Foo:3, Bar:3 },
{ Id: 5, Date: '2015-01-09', Foo:3, Bar:3 },
];
var list2 = [
{ Id: 1, Date: '2015-01-01', Foo:1, Bar:2 },
{ Id: 2, Date: '2015-01-03', Foo:3, Bar:3 },
{ Id: 3, Date: '2015-02-03', Foo:8, Bar:8 },
];
var predicateListFunc = function (props) {
return R.allPass(R.map(R.curry(R.eqProps), props));
}
var compareProperties = R.unapply(predicateListFunc);
var mergeLists = R.unionWith(compareProperties("Id", "Date"));
var groupById = R.groupBy(R.prop("Id"));
var getGroups = R.compose(R.toPairs, groupById, mergeLists);
var groups = getGroups(list1, list2);
var result = JSON.stringify(groups, null, 4)
document.getElementsByTagName("pre")[0].innerHTML = result;