带你理解filter()、map()、reduce()这三个高阶js函数

用上了高阶函数,逼格满满啊🤭

本篇文章是借鉴了进击的大葱再加上自己的理解写出来的。希望对小伙伴们有所帮助。

1.什么是高阶函数

高阶函数是那些操作其他函数的函数。用最简单的话来说,高阶函数就是一个将函数作为参数或者返回值的函数。
例如Array.prototype.map,Array.prototype.filterArray.prototype.reduce是JavaScript原生的高阶函数。
不要看上面的三个高阶函数写法复杂就感觉自己不行了,男人怎么能说自己不行呢🤭。
其实用法非常的简单,不会写这么复杂的,上面看着复杂,其实它们是定义在了原形上的。在js中直接.filter().map().reduce()就可以使用。

2.简单的一个需求

我这里写一个简单的需求,可以很好的帮助小伙伴们理解。当然了,理解了我的需求并且学会了怎么使用这三个高阶函数之后。可以去看进击的大葱的文章,这个时候看大佬的文章就会感觉好简单。。。

  • const nums = [10, 50, 150, 320, 60, 80, 40]

  • 需求1:取出所有小于100的数字

  • 需求2:将所有小于100的数字转化: 全部 *2

  • 需求3:之后再进行全部相加

理解了需求之后,开始向前冲吧~~🤭。

3.需求1:取出所有小于100的数字

先使用普通函数

let newNum = [];
for (let n of nums) {
    if (n < 100) {
        newNum.push(n)
    }
}

使用 filter()

// filter 过滤
/* filter 中的回调函数有一个要求:必须返回boolean值
	当返回true时,函数内部自动将这次回调的n加入新的数组中
	当返回false时,函数内部自动给过滤掉这次的n
*/
let newNum = nums.filter(function (n) {
	return n < 100;
});

4.需求2:将所有小于100的数字转化: 全部 *2

先使用普通函数

let new2Num = []
for (let n of newNum) {
	new2Num.push(n * 2)
}

使用 map()

//map 映射newNum,newNum数组中有几个内容,回调函数就执行几次
let new2Num = newNum.map(function (n) {
	return n * 2;
})

5.需求3:之后再进行全部相加

先使用普通函数

let sum = 0;
for (let n of new2Num) {
	sum += n
}

使用 reduce()

//reduce 这个函数有两个参数,且回调函数也有两个参数 
//reduce函数第一个参数是回调函数 第二个参数是回调函数中第一个参数的初始值
//reduce的回调函数第二个值为new2Num的值
// 表达式: arr1.reduce(func(a, b), c)
// 解释:reduce的第一个参数是func函数,第二个参数是初始化a值的c(只有初始化一次)
//		func函数中的第一个参数是会被保存的,也是旧的值;例如下面的previousValue初始值0,随着n的增加,previousValue在原有的基础上增加
//		func函数中的第二个参数就是arr1
let sum = new2Num.reduce(function (previousValue, n){
	return previousValue + n;
}, 0);

6.优化

优化第一步
const nums = [10, 50, 150, 320, 60, 80, 40]
let sum = nums.filter(function(n) {
	return n < 100;
}).map(function (n) {
	return n * 2;
}).reduce(function (previousValue,n){
	return previousValue + n;
},0);
console.log(sum)
如果了解箭头函数,最终优化
let sum = nums.filter(n => n < 100).map(n => n * 2).reduce((preValue, n) => preValue + n)

7.结语

学完上面的三个高阶函数是不是感觉,js也不是这么难吗。只要理解了且多敲代码,学习js其实就简简单单。。。
最后,感谢小伙伴们的支持!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值