简介
- reduce()接受一个函数作为累加器,从数组第一个值开始缩减,直到最后一个值缩减完成。最终计算为一个值
- reduce()可做为高阶函数,用于函数的,compose
- reduce()无法调用空数组,会报错。
语法:
array.reduce( function (total, currentValue, currentIndex, arr), initialValue)
arr.reduce (function ,initialValue) | function (total, currentValue, currentIndex, arr) |
---|---|
fun: 回调函数 | total: 初始值initialValue,或fun的返回值 |
initialValue: 传递函数初始值 | currentValue:当前值 |
. | currentIndex:当前我的索引 |
. | arr:要累加的arr非空数组 |
要注意的是当 initialValue 的值为空的,也就是没有初始值时,函数第一次累加的 total 将会是 arr 的第一个元素,currentindex 的值为 1,
简单例子:
Exp1
累加应用
let arr2 = [1,2,3,4,5,6,7,8,9,10]
let allsum = arr2.reduce((sum,currentValue)=>{
return sum += currentValue
},100)
console.log(allsum)//155
Exp2
将string1分割为数组[a,b,c,d],用reduce拼接到newStr中,得到的结果 0abcd;
let string = 'a-b-c-d'
let arr = string.split('-')//[a,b,c,d]
let newStr = '0'
function getString(all, currentValue, currentIndex, arr) {
console.log(all, currentValue, currentIndex)
return all += currentValue
}
let value = arr.reduce(getString,newStr)
console.log(value) // 0abcd
getString部分运行结果: 被调用四次
0 a 0
0a b 1
0ab c 2
0abc d 3
最终value打印:
0abcd
要注意的是,如果没有初始值 newStr,运行结果如
getString部分运行结果: 被调用三次
a b 1 //第一次循环将arr的第一个元素作为初始值,当前索引为1
ab c 2
abc d 3
最终value打印:
abcd