前言
reduce这个方法真的已经学习过很多次了,学了之后也很少用,又不记得了~ :joy:再来复习一遍。
reduce
arr.reduce(fn)的返回值是处理的结果;
reduce 函数接收4个参数:
- Accumulator (acc) (累计器)
- Current Value (cur) (当前值)
- Current Index (idx) (当前索引)
- Source Array (src) (源数组)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| let arr = [1, 2, 3, 4, 5, 6];
let fn = function (acc, item) { return acc + item }
let result = arr.reduce(fn); let result_1 = arr.reduce(fn, 0);
console.log(result); console.log(result_1);
|
reduceRight
reduceRight方法接受一个函数作为累加器(accumulator)和数组的每个值(从右到左)将其减少为单个值。
1 2 3 4 5 6 7 8 9 10 11
| let arr = [[1, 2],[3, 4],[5, 6]];
let fn = function (acc, item) { return acc.concat(item) } let result = arr.reduce(fn); let result_1 = arr.reduceRight(fn);
console.log(result); console.log(result_1);
|
compose
返回值是一个函数, 入参也是函数, 执行的结果作为下一个执行函数的入参.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| function compose(){ var args = [].slice.call(arguments); return function(initArg){ return args.reduce(function(init, current){ return current(init); },initArg) } }
const g = (y) => y + 1 const f = (x) => 2 * x
const w = compose(g, f); console.log(w(1)) console.log(w(2)) console.log(w(3))
|