Let\'s assume that we have 2 sets of objects
set1 = [{\'id\':\'1\', \'x\':\'1\', \'y\':\'2\'}, {\'id\':\'2\', \'x\':\'2\', \'y\':\'2\'}]
set2 = [{\'id\':\'1
Another option using Ramda:
const r = require('ramda')
const outerJoin = r.curry(function(relationName, set1, keyName1, set2, keyName2) {
const processRecord = function(record1) {
const key1 = record1[keyName1]
const findIn2 = r.find(r.propEq(keyName2, key1))
const record2 = findIn2(set2)
record1[relationName] = record2
return record1
}
return r.map(processRecord, set1)
})
assumptions
//set1 is an array of objects
set1 : [{}]
//set1 has a property for the key of type T
set1[keyName1] : T
//set2 is an array of objects
set2 : [{}]
//set2 has a property for the key which is also of type T
set2[keyName2] : T
Output
[{
...set1 members...
, relationName: ...set2 members...
}]
I guess a better output might be (shouldn't be hard to get here):
[{
, leftObj:...set1 members...
, rightObj: ...set2 members...
}]
and add support for inner joins. But I was replacing some crappy code and needed to replicate the object hierarchy.