定义
reduce() 方法对数组中的每个元素执行一个 reducer 函数(升序执行),并将其结果汇总为单个返回值。
基础示例
/**
求数组中各项的和
**/
// 没有初始值
let arr = [1, 2, 3, 4, 5];
let reducer = (accumulator, current) => accumulator + current;
console.log(arr.reduce(reducer)) //1+2+3+4+5 = 15
//有初始值
console.log(arr.reduce(reducer, 10)) // 10+1+2+3+4+5 = 25
reducer
reducer 函数接收四个参数
Accumulator(acc) - 累加器:累计器累计回调的返回值; 它是上一次调用回调时返回的累积值
Current Value(cur) - 当前值:数组中正在处理的元素
Current Index(idx) - 当前索引:数组中正在处理元素的索引
Source Array(src) - 源数组:正在处理的数组
reducer 函数的返回值分配给累加器,该返回值在数组的每个迭代中被记住,最后成为最终的单个结果值。
reduce 语法
arr.reduce(callback, initialValue)
参数说明:
callback:即为上面 reducer;
initialValue:第一次调用 callback 函数的初始值。如果没有提供 initialValue,acc 将使用数组的第一个元素,cur 使用数组的第二个元素;如果有,acc 即使用 initialValue。在空数组上调用 reduce 会报错。
如果数组为空且没有 initialValue,会抛出 Type Error;如果数组为空有 initialValue 或数组有一个元素没有 initialValue,会返回这个唯一值,callback 不会被执行(建议都提供初始值)。
拓展示例
/**
计算数组中各个元素出现的次数
**/
let arr = ['a', 'b', 'a', 'c', 'd', 'd'];
let reducer = (allElements, element) => {
if(element in allElements){
allElements[element] ++
}else{
allElements[element] = 1
}
return allElements;
}
console.log(arr.reduce(reducer, {})) // { "a": 2, "b": 1, "c": 1, "d": 2 }
/*
将二维数组展开为一维数组
*/
[[1,2],[3,4],[5,6]].reduce((acc, cur) => {
return acc.concat(cur);
}, [])
网友评论