Я знаю, что Ramda.js обеспечивает функцию уменьшения, но я пытаюсь научиться использовать 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
})();
Выполнить это на РЕПЛ: http://ramdajs.com/repl/
Существуют ли особые случаи, которые вы хотите обработать, которые не будут работать для 'const reduce = R.curry ((fn, accum, list) => list.reduce (fn, accum));'? – user3297291