Вау, во-первых - спасибо, что нашли время проанализировать его и написать примеры кода! В целом я склонен согласиться с тем, что вам следует больше беспокоиться о написании удобочитаемого и поддерживаемого кода, чем о производительности. Эта статья была специально о влиянии на производительность методов объединения в цепочку, которое я видел в рабочих Node-приложениях, поэтому у меня не было моего примера, который все время использовал бы только один редуктор.

Также, если вы собираетесь написать такой редуктор:

const totalExpensesInINR = tripExpenses.reduce(
  (sum, {amount, currency, paid}) => {
    const key = paid ? 'paid' : 'unpaid'
    sum[key] += currency === 'USD' ? amount * 70 : amount;
    return sum;
  },
  {paid: 0, unpaid: 0}
);

Тогда будет справедливо написать такой пример:

let totalExpensesInINR = {paid: 0, unpaid: 0};
for (const expense of tripExpenses) {
  const key = expense.paid ? 'paid' : 'unpaid';
  totalExpensesInINR[key] += expense.currency === 'USD' ? expense.amount * 70 : expense.amount;
}

который почти так же удобочитаем (и, возможно, легче понять для тех, кто не слышал о функции редуктора), как пример редуктора. Использование функции отдельного преобразователя только без надобности усложняет ее (и снижает удобочитаемость), поскольку мы не будем использовать ее где-либо еще.

Если вы хотите использовать его повторно, вы можете просто инкапсулировать for-of как функцию и вызывать ее, когда захотите. Таким образом, вы получаете и удобочитаемость, и производительность!

Интересно отметить, что после прочтения вашего комментария мне стало интересно, может ли использование только редуктора обеспечить лучшую производительность, чем цикл for-of, поэтому я вернулся к JSPerf (https://jsperf.com/functional-vs- for-of-array-methods-vs-reducer-only ), и, что удивительно, тест только для редуктора оказался самым быстрым в Firefox. Однако он все еще был более чем на 50% медленнее, чем for-of в Chrome (и на Node). Я предполагаю, что Firefox встраивает редуктор, а Chrome - нет.