Ramda.jsはreduce関数を提供していますが、私はramdaを使用する方法を学習しようとしており、レデューサーは良い例だと思いました。次のコードが与えられれば、より効率的で機能的なアプローチは何でしょうか?ramdaを使用してカスタムレデューサーを実装する
(function(){
// Some operators. Sum and multiplication.
const sum = (a, b) => a + b;
const mult = (a, b) => a * b;
// The reduce function
const reduce = R.curry((fn, accum, list) => {
const op = R.curry(fn);
while(list.length > 0){
accum = pipe(R.head, op(accum))(list);
list = R.drop(1, list);
}
return accum;
});
const reduceBySum = reduce(sum, 0);
const reduceByMult = reduce(mult, 1);
const data = [1, 2, 3, 4];
const result1 = reduceBySum(data);
const result2 = reduceByMult(data);
console.log(result1); // 1 + 2 + 3 + 4 => 10
console.log(result2); // 1 * 2 * 3 * 4 => 24
})();
REPLで実行します。この:http://ramdajs.com/repl/
'const reduce = R.curry((fn、accum、list)=> list.reduce(fn、accum));'に対しては機能しない特殊なケースがありますか? – user3297291