数组遍历循环方法-reduce

在日常用到的数组遍历方法有forEach()、map()、filter()、reduce,这里单独说说reduce。

一、语法

var arr = [2,4,3,5,1];
arr.reduce(function(prev,cur,index,arr){
	console.log(prev)      //init的值或arr[0]
	console.log(cur)      //2,3,4,5
	console.log(index)   //1,2,3,4,5
	console.log(arr)    //2,4,3,5,1
}, init);

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

Array.reduce(callback)
这个方法是根据callback中的条件对数组中的每个元素都进行类加的操作,返回一个全新的值

二、实例

1. 求数组项之和
let arr2= [1,2,3,4,5,2,3];

// 求数组之和
let sum = arr2.reduce(function(prev, cur){
    return prev + cur;
},0);
console.log(sum);  //20

//箭头函数写法
let b = a.reduce((i, j) => {
  return i + j;
}, 0);
console.log(b) //20

由于传入了初始值0,所以开始时prev的值为0,cur的值为数组第一项1,相加之后返回值作为下一轮回调的prev值,然后再继续与下一个数组项相加

2. 求数组项最大值
let arr2= [1,2,3,4,5,2,3];

// 求数组最大值
let max = arr2.reduce(function(prev, cur){
  return Math.max(prev, cur);
});
console.log(max);

// 箭头函数写法
let newArr2 = arr.reduce((pre,cur,curIndex,arr) => pre>cur?pre:cur)
//pre=1不大于cur=2,返回2;
//pre接收返回值2;pre=2不大于cur=3,返回3
console.log(newArr2) //输出4,找到最大值,如果想找最小值只需要pre<cur?pre:cur

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

3. 数组去重
let arr2= [1,2,3,4,5,2,3];
let newArr = arr2.reduce(function(prev, cur){
    if( prev.indexOf(cur) == -1){
        prev.push(cur);
    }
    return prev;

},[]);
console.log(newArr); //[1,2,3,4,5]

实现的原理如下:

初始化一个空数组,将需要去重的数组的值在空数组里查找,如果找不到,就将这个值添加到空数组里,直到查找完毕,将空数组返回出来。

重点总结

reduce() 是数组的归并方法,与forEach()、map()、filter()等迭代方法一样都会对数组每一项进行遍历,但是reduce() 可同时将前面数组项遍历产生的结果与当前遍历项进行运算,这一点是其他迭代方法无法企及的

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值