function join(lookupTable, mainTable, lookupKey, mainKey, select) {
const l = lookupTable.length,
m = mainTable.length,
output = [],
lookupIndex = new Map(lookupTable.map(d => [d[lookupKey], d]));
return mainTable.map(d => select(d, lookupIndex.get(d[mainKey])));
return output;
}