Interesting read. It’s fascinating how code opinions vary from developer to developer. I find reduce easier to read than forEach and in all cases in your article prefer the reduce implementation.
Still, I appreciate that a lot of people find it hard to intuit reduce.
The big downside for me with using forEach is that it’s not obvious if something is being mutated. I’d much rather a reducer than to see an array push inside a loop. You did acknowledge that immutability is a big deal for some people and I agree that if you don’t dislike mutating things then forEach is valid.