什么是 reduce
reduce() 方法对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值
const array1 = [1, 2, 3, 4];
const reducer = (accumulator, currentValue) => accumulator + currentValue;
// 1 + 2 + 3 + 4
console.log(array1.reduce(reducer));
// expected output: 10
// 5 + 1 + 2 + 3 + 4
console.log(array1.reduce(reducer, 5));
// expected output: 15
什么是聚合函数
如下函数,聚合成一个函数,并把第一个函数的返回值传递给下一个函数。
function f1(arg) {
console.log("f1", arg);
return arg;
}
function f2(arg) {
console.log("f2", arg);
return arg;
}
function f3(arg) {
console.log("f3", arg);
return arg;
}
// 方法1:
let res = f1(f2(f3('name')))
console.log('res', res)
// 结果:
// f3 name
// f2 name
// f1 name
// res name
// 方法2:
let res = compose(f1, f2, f3)('name')
console.log('res', res)
// 结果:
// f3 name
// f2 name
// f1 name
// res name
function compose(...funcs) {
// 处理如果没有传递参数
if(funcs.length === 0) return arg => arg
return funcs.reduce((a, b) => (...args) => a(b(...args)))
}