The real answer is "it depends", but in the vast majority of cases it is better to "push down" all control flow structures: both conditional branching and loops. This will make it easier to write the code as a pipeline, and therefore more readable.
Some argue that higher-order functions (HoFs) should be "pushed up" even if they make the code more verbose (that's a standard code style in Elixir), while the alternative is more readable - it creates lots of microfunctions, which are also clutter the code.
For programming langauges with either succinct control structures (APL family), or with syntactic sugar for them, I see no problem with "pushing them up".
Of course there are exceptions, e.g. in case the code needs to be optimized for speed, memory usage, security, or formal code correction.
Some argue that higher-order functions (HoFs) should be "pushed up" even if they make the code more verbose (that's a standard code style in Elixir), while the alternative is more readable - it creates lots of microfunctions, which are also clutter the code.
For programming langauges with either succinct control structures (APL family), or with syntactic sugar for them, I see no problem with "pushing them up".
Of course there are exceptions, e.g. in case the code needs to be optimized for speed, memory usage, security, or formal code correction.