js

梗概:

  • 本质是一个递归函数, 对排除了最后一个元素的数组进行递归操作
  • 然后把结果与最后一个元素进行操作,并返回结果

适用范围

  • 对数组元素进行递归操作

场景

  • 求数组最值
  • 将数组转换为复杂的对象

实例说明:

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
});                                               // 得到 342

3. 将字符串转换为整数

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})        // 得到 43214

3.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]