JavaScript reduce()

reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。

语法

1
2
3
arr.reduce(function(prev,cur,index,arr){
...
}, init);
  • arr 表示原数组;
  • prev 表示上一次调用回调时的返回值,或者初始值 init;
  • cur 表示当前正在处理的数组元素;
  • index 表示当前正在处理的数组元素的索引,若提供 init 值,则索引为0,否则索引为1;
  • init 表示初始值。

示例

数组项求和

1
2
3
4
5
6
7
8
var arr = [1, 2, 3, 5, 7, 8];
var total = arr.reduce(function (prev, cur) {
console.log('hi', prev, cur)
return prev + cur;
},0);
console.log('total', total)

运行结果:
image.png

1
2
3
4
5
6
7
8
9
10
11
12
13
var orders = [
{num: 10},
{num: 10},
{num: 10},
{num: 10}
]
var total = orders.reduce(function(sum, order){
console.log('hi', sum, order)
return sum + order.num
}, 0)
console.log('total', total)

运行结果:
image.png

求数组项最大值

1
2
3
4
5
6
7
8
var arr = [10, 22, 13, 45, 7, 8];
var max = arr.reduce(function (prev, cur) {
console.log('last max', prev)
return Math.max(prev,cur);
});
console.log('max', max)

运行结果:
image.png

数组去重

1
2
3
4
5
6
var arr = [10, 7, 22, 7, 13, 45, 7, 8, 7];
var newArr = arr.reduce(function (prev, cur) {
prev.indexOf(cur) === -1 && prev.push(cur);
return prev;
},[]);

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

参考: https://www.jianshu.com/p/541b84c9df90

Exchange blogroll: http://laker.me/blog
Github:https://github.com/younglaker


JavaScript reduce()

本文原创自http://laker.me/blog,转载请注明出处,欢迎交换友链

如果本文对您有帮助,微信扫一扫,请我吃个鸡腿吧