JavaScript中reduce使用

1.reduce介绍

reduce() 方法对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值。

reducer 函数接收4个参数:
1.Accumulator (acc) (累计器)
2.Current Value (cur) (当前值)
3.Current Index (idx) (当前索引)
4.Source Array (src) (源数组)

您的 reducer 函数的返回值分配给累计器,该返回值在数组的每个迭代中被记住,并最后成为最终的单个结果值。

先看语法规定:

arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])

callback:
执行数组中每个值的函数,包含四个参数:
1.accumulator
累计器累计回调的返回值; 它是上一次调用回调时返回的累积值,或initialValue(见于下方)。
2.currentValue
数组中正在处理的元素。
3.currentIndex可选
数组中正在处理的当前元素的索引。 如果提供了initialValue,则起始索引号为0,否则为1。
4.array可选
调用reduce()的数组

initialValue可选
作为第一次调用 callback函数时的第一个参数的值。 如果没有提供初始值,则将使用数组中的第一个元素。 在没有初始值的空数组上调用 reduce 将报错。

返回值:
函数累计处理的结果

描述

reduce为数组中的每一个元素依次执行callback函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:

1.accumulator 累计器
2.currentValue 当前值
3.currentIndex 当前索引
4.array 数组

回调函数第一次执行时,accumulator 和currentValue的取值有两种情况:
1.如果调用reduce()时提供了initialValue,accumulator取值为initialValue,currentValue取数组中的第一个值;
2.如果没有提供 initialValue,那么accumulator取数组中的第一个值,currentValue取数组中的第二个值。

注意:如果没有提供initialValue,reduce 会从索引1的地方开始执行 callback 方法,跳过第一个索引。如果提供initialValue,从索引0开始。

总结:reduce为数组中的每一个元素依次执行callback函数,您的 reducer 函数的返回值分配给累计器accumulator ,该返回值在数组的每个迭代中被记住,accumulator 它是上一次调用回调时返回的累积值,或initialValue,如果调用reduce()时提供了initialValue,accumulator取值为initialValue,currentValue取数组中的第一个值,如果没有提供 initialValue,那么accumulator取数组中的第一个值,currentValue取数组中的第二个值。

2.reduce使用

1.求数组之和

var sum = arr.reduce(function (prev, cur) {
    return prev + cur;
},0);

由于传入了初始值0,所以开始时prev的值为0,cur的值为数组第一项3,相加之后返回值为3作为下
一轮回调的prev值,然后再继续与下一个数组项相加,以此类推,直至完成所有数组项的和并返回。

2.求数组项最大值

var max = arr.reduce(function (prev, cur) {
    return Math.max(prev,cur);
});

由于未传入初始值,所以开始时prev的值为数组第一项3,cur的值为数组第二项9,取两值最大值后继续进入下一轮回调。

3.数组去重

var newArr = arr.reduce(function (prev, cur) {
    prev.indexOf(cur) === -1 && prev.push(cur);
    return prev;
},[]);

实现的基本原理如下:

① 初始化一个空数组
② 将需要去重处理的数组中的第1项在初始化数组中查找,如果找不到(空数组中肯定找不到),就将该项添加到初始化数组中
③ 将需要去重处理的数组中的第2项在初始化数组中查找,如果找不到,就将该项继续添加到初始化数组中
④ ……
⑤ 将需要去重处理的数组中的第n项在初始化数组中查找,如果找不到,就将该项继续添加到初始化数组中
⑥ 将这个初始化数组返回

参考文章:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce
https://www.jianshu.com/p/541b84c9df90

你可能感兴趣的:(Javascript)