梗概:
- 本质是一个递归函数, 对排除了最后一个元素的数组进行递归操作
- 然后把结果与最后一个元素进行操作,并返回结果
适用范围
- 对数组元素进行递归操作
场景
- 求数组最值
- 将数组转换为复杂的对象
实例说明:
child::
参数说明:
array.reduce(function(accumulator, currentValue, currentIndex, arr), initialValue);
/*
accumulator: 必需。累计器
currentValue: 必需。当前元素
currentIndex: 可选。当前元素的索引;
arr: 可选。要处理的数组
initialValue: 可选。传递给函数的初始值,相当于accumulator的初始值, 默认为0
*/0.1. 实际应用
1. 求加法(乘法同理)
let arr = [1, 2, 3, 4, 5];
arr.reduce((sum, curr) => sum + curr, 0); // 得到15此基础上还可以求平均值
2. 求最大值(最小值同理)
let arr = [23,123,342,12];
let max = arr.reduce((pre,cur,index,arr) => {
return pre > cur ? pre : cur
}); // 得到 3423. 将字符串转换为整数
let str = "4321"
let strParseInt = str.split('') // 得到 ['4', '3', '2', '1', '4']
.map(item => {return item.charCodeAt() - 48}) // 得到 [4, 3, 2, 1, 4]
.reduce((a, b) => {return a * 10 + b}) // 得到 432143.1. 字符统计/单词统计同理
let str = 'abcdaabc';
str.split('').reduce((res, cur) => {
res[cur] ? res[cur] ++ : res[cur] = 1 // 如果cur第一次出现,记为1
return res; // 否则记录数+1
}, {}) // 得到 {a: 3, b: 2, c: 2, d: 1}3.2. 数组去重
let arr = [1, 2, 3, 4, 4, 1]
let newArr = arr.reduce((pre,cur) => {
if(!pre.includes(cur)){
return pre.concat(cur)
}else{
return pre
}
},[]) // 得到 [1, 2, 3, 4]3.3. 数组维度转换
let arr = [[0, 1]] // 二维数组
let newArr = arr.reduce((pre,cur) => {
return pre.concat(cur) // 合并pre 与 cur, 并返回一个新数组
},[])
console.log(newArr); // 一维数组 [0, 1, 2, 3, 4, 5]