forEach の模倣
次のようなforEachは、
forEach.js
array.forEach(body);
reduceにより一行で模倣できる。
simulation_forEach.js
array.reduce((_, ...args) => void body(...args), void 0);
reduce の模倣
逆に、次のようなreduceも、
reduce.js
const result1 = array.reduce(reducer, init);
forEachにより模倣できる。ただし、一行では模倣できない。
simulation_reduce.js
let acc = init;
array.forEach((...args) => {acc = reducer(acc, ...args)});
const result2 = acc;
用法用量を守って畳み込みましょう
forEachは万能だけど、reduceはそれにもまして万能なので、気をつけて使わないとやたら抽象的なコードになったりする。
reduceを使うときは「他のメソッドで代替できないか」、「forやwhileで書いたほうがわかりやすくないか」、一度立ち止まって考えたい。