У меня вопрос, для которого не хочется создавать отдельную тему и который уже когда-то обсуждался: для чего создан void в JS? Я не думаю, что у создателей языка просто зачесалась левая пятка и они решили добавить альтернативу undefined. Я вижу только одну возможную причину: использование void там, где undefined может быть перезаписана. Но, все равно, это мне кажется неадекватным костылем, иначе перезапись undefined могли бы запретить, как и перезапись NaN, Infinity и др.
reduce в данном случае имеет более сложную семантику, а так, да, можно и его. но я бы предпочёл всё же итераторы, чтобы иметь полный контроль над потоком исполнения.
к тому же, в более других случаях нужно обеспечивать ещё и уникальность значений в результирующем массиве, а для этого всё-равно нужно снаружи создавать хэшик для быстрого определения наличия значения.
Я понимаю, что ты взял первый попавшийся пример применения, но ты наверно не понял меня: для чего создан void? Мгновенный запуск анонимных функций можно реализовать еще несколькими методами.