Specifically, cases where you want to look really smart and don't care about readability.
"the applicability of reduce() is pretty much limited to associative operators, and in all other cases it's better to write out the accumulation loop explicitly"
artima.com/weblogs/viewpo…
In this case I think the map + join is more expressive. However, I'd go for the loop if the two iterations caused performance issues (which is unlikely).
// Reduce:
arr.reduce((str, item) => str += item, '');
// Not reduce:
arr.map(item => item.foo).join('');
// Loop:
let str = '';
for (const item of arr) str += item.foo;" src="/images/1px.png" data-src="https://pbs.twimg.com/media/ENbkzIJXUAEsaxa.jpg">