map/filter/reduce x for, e mutação
Pergunta
Quando usar `map`/`filter`/`reduce` em vez de um `for`, e qual cuidado com métodos de array que mutam?
Resposta esperada
`map`/`filter`/`reduce` expressam a INTENÇÃO (transformar, selecionar, agregar) e retornam um array/valor NOVO, sem mutar o original — bom pra código declarativo e pra fluxos imutáveis (React state, por exemplo). `for`/`for...of` ganham quando: você precisa de `break`/`continue`, o corpo tem efeito colateral (não é uma transformação pura), performance em caminho ultra-quente (raro importar), ou a lógica não encaixa numa das três. Cuidado com os métodos que MUTAM o array no lugar e retornam algo confuso: `sort`, `reverse`, `splice`, `push`, `fill`, `copyWithin` — `arr.sort()` reordena `arr` e ainda retorna `arr`, então `const b = a.sort()` deixa `a` bagunçado. Os novos `toSorted`, `toReversed`, `toSpliced`, `with` são as versões imutáveis. `slice` (não `splice`) e `concat` não mutam.
Por que perguntam isso
Pergunta júnior/pleno de JS. Sinal bom: saber quais métodos mutam (sort/reverse/splice) e as alternativas imutáveis novas.