支持谷歌、火狐、ie9以上等主流浏览器数组
array.reduce(function(prev, current, currentIndex, arr), initialValue)
初始值为数值:浏览器
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; const sum = arr.reduce(function (prev, current) { return prev+current }, 0) console.log(sum) //55
reduce根据函数传进来的初始值,不断回调叠加最终算出数组的和函数
初始值为对象:code
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; const sum = arr.reduce(function (prev, current) { prev.count = prev.count+current return prev }, {count: 0}) console.log(sum) //{count: 55}
若是初始值为对象的话,返回的也是一个对象对象
初始值为数组:索引
const str = 'hello' const newstr = str.split('').reduce(function (prev, current) { const obj = {}; obj[current] = current; prev.push(obj) return prev; }, []) console.log(newstr)
结果为:回调函数
[{ h: 'h' },{ e: 'e' },{ l: 'l' },{ l: 'l' },{ o: 'o' }]
若是初始值为数组,则返回的也是数组it
reduce应用:io
{ function func1(a) { return a*10; } function func2(b) { return b*2 } const test1 = func1(2) const test2 = func2(test1) console.log(test2) //40 }
这里咱们须要先执行方法func1再根据func1返回的值,而后执行方法func2,咱们有时候会碰到不止两个方法一块儿,若是是多个呢,这个时候就要用到reduce来处理了console
function func1(a) { return a*10; } function func2(b) { return b*2 } function func3(c) { return c/2; } const compose = (...func) => (...init) => { if(func.length >= 2){ return func.reduce((prev, curr)=>{ prev = curr(prev) return prev; }, ...init) } return func(...init); } const a1 = compose(func1,func2)(2); console.log(a1) //40 const a2 = compose(func1,func2,func3)(2); console.log(a2) //20