JavaScript reduce()
2020-03-03 本文已影响0人
younglaker
reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
语法
arr.reduce(function(prev,cur,index,arr){
...
}, init);
- arr 表示原数组;
- prev 表示上一次调用回调时的返回值,或者初始值 init;
- cur 表示当前正在处理的数组元素;
- index 表示当前正在处理的数组元素的索引,若提供 init 值,则索引为0,否则索引为1;
- init 表示初始值。
示例
数组项求和
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)
运行结果:

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)
运行结果:

求数组项最大值
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)
运行结果:

数组去重
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项在初始化数组中查找,如果找不到,就将该项继续添加到初始化数组中
⑥ 将这个初始化数组返回