arr = arr.reduce(function (result, el) {
el.method();
return result; // ничего не добавляем, на выходе будет то чем мы инициировали
}, []); // а инициируем мы пустым массивом
Сергей Протько: я бы не сказал, что это js-way, скорее просто функциональщина. reduce - замечательно, но в данном случае он (как и любой другой метод из его семейки) не особо здесь и нужен, а страдают и краткость, и производительность. А while и до строки сократить можно. while(arr.length)arr.pop().method();
Хотя вариант while без pop, в теории, чуть быстрее.
Денис Пушкарев: как по мне "функциональщина" это как раз таки js-way. Вопрос в том что если в будущем понадобится не просто цикл обходить а условия вставлять и т.д. можно будет добавить filter перед этим делом или просто в reduce условие воткнуть.
Есть еще такой момент, если скажем рассматривать вариант с формированием новой коллекции в контексте angularjs с тамошней системой датабиндинга, ваш вариант с pop скажется при отслеживании изменений в коллекции, так как ссылка на объект не поменяется.
Сергей Протько: скорее тогда es5-way, в es3 данной семейки методов нет, в es6/7 основная ставка сделана на протокол итераторов + array / generator comprehensions. А так - да, универсальней, но уж лучше какой forEach и отдельной строкой присвоение старому массива пустому - лишняя путаница. Ну а про angular и сам хотел написать, но посчитал лишним.
Денис Пушкарев: ну несовсем так. Генераторы это сахар над старыми добрыми итераторами. То есть на reduce/map это сказаться никак не должно по идее. map/reduce в ES5 появились по сути в стандартной библиотеке, до этого использовались свои реализации (underscore/lodash).
Сергей Протько: со словарями погорячился слегка, если смутило - фишка одного моего велосипеда с использованием Map-подобного конструктора, ожидающего итератор entries.