I found a way to build objects dynamically from text paths. The solution relies on the reducer passed to Array.prototype.reduce() updating initialValue parameter via previousValue callback parameter. Here is a simplified example -
const initialValue = {};
['a', 'b', 'c'].reduce((previousValue, currentValue) => {
previousValue[currentValue] = {};
return previousValue[currentValue];
}, initialValue);
console.log(initialValue); //{ a: { b: { c: {} } } }
Apparently the inner most {} of initialValue is replaced with { currentValue: {}} on each iteration. Where is this behaviour defined? In case it is not defined, how else could an object be built based on text paths?