javascript高阶函数是什么_如何使用map、filter和reduce【教程】
发布时间 - 2026-01-21 00:00:00 点击率:次高阶函数指接受函数为参数或返回函数的函数,如map、filter、reduce;map不修改原数组而返回新数组,需显式赋值;filter对假值元素过滤且空数组返回空数组;reduce必须提供初始值以防空数组报错。
高阶函数不是“高级用法”,而是指接受函数作为参数、或返回函数的函数——map、filter、reduce 都是典型的内置高阶函数,它们本身不直接操作数据,而是靠你传进

为什么 map 不改变原数组,但总有人误以为它会?
因为 map 的设计目标就是“纯函数式转换”:它遍历数组,对每个元素调用你给的回调函数,然后返回一个全新数组,原数组完全不动。
- 常见错误:写成
arr.map(...); console.log(arr);期待看到变化 → 实际上arr一点没变 - 正确做法:必须显式赋值,比如
const newArr = arr.map(x => x * 2); - 注意点:如果回调里写了副作用(比如修改外部变量、发请求),
map依然只管返回新数组,副作用是否发生取决于你写的回调 - 性能提示:
map每次都新建数组,大数据量时别在循环里反复调用;若只需遍历无返回,用forEach更合适
filter 返回空数组 ≠ 你写错了,可能是条件太严或数据类型不对
filter 的行为很直白:对每个元素执行回调,返回 true 的留下,false 或假值(0、null、undefined)的过滤掉。但它不会报错,所以“没结果”往往是因为逻辑没兜住。
- 典型陷阱:用
===比较字符串和数字,比如item.id === '1'但item.id是数字1→ 永远不匹配 - 容易忽略:
filter对undefined或null元素也会调用回调,如果回调里直接访问prop会报Cannot read property 'xxx' of undefined - 安全写法:先做存在性检查,如
arr.filter(item => item && item.status === 'active') - 注意:空数组调用
filter总是返回空数组,不是 bug,是符合预期的设计
reduce 的初始值(第二个参数)不是可选的,漏掉会导致第一轮计算出错
reduce 的签名是 arr.reduce(callback, initialValue)。很多人省略 initialValue,指望它自动用第一个元素当起点——这在非空数组时看似可行,但一旦数组为空,就会直接抛错:Reduce of empty array with no initial value。
- 必须填初始值的场景:求和、拼接字符串、扁平化嵌套数组、构建对象映射等
- 常见错误写法:
arr.reduce((acc, cur) => acc + cur)→ 数组为空时崩溃 - 稳妥写法:
arr.reduce((acc, cur) => acc + cur, 0)(数字累加)、arr.reduce((acc, cur) => ({...acc, [cur.id]: cur}), {})(转对象) - 性能提醒:每次迭代都展开对象(
{...acc})会产生新对象,大数据量时考虑用Map或分批处理
真正难的不是记住这三个函数怎么写,而是判断该不该用、用哪个更合适——比如想“找一个满足条件的元素”,filter 返回数组,find 才是正解;想“统计出现次数”,reduce 是主力,但别忘了 Map 可能更清晰。函数式风格的前提,是清楚每一步的输入输出和副作用边界。
# javascript
# java
# 大数据
# 回调函数
# 为什么
# red
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
如何快速上传自定义模板至建站之星?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
香港服务器网站卡顿?如何解决网络延迟与负载问题?
中国移动官方网站首页入口 中国移动官网网页登录
Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践
laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法
悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程
Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
专业商城网站制作公司有哪些,pi商城官网是哪个?
Laravel中的withCount方法怎么高效统计关联模型数量
android nfc常用标签读取总结
如何快速生成凡客建站的专业级图册?
C语言设计一个闪闪的圣诞树
潮流网站制作头像软件下载,适合母子的网名有哪些?
如何在橙子建站中快速调整背景颜色?
在线教育网站制作平台,山西立德教育官网?
Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧
如何在建站之星绑定自定义域名?
如何用好域名打造高点击率的自主建站?
Laravel如何实现密码重置功能_Laravel密码找回与重置流程
lovemo网页版地址 lovemo官网手机登录
Angular 表单中正确绑定输入值以确保提交与验证正常工作
如何用搬瓦工VPS快速搭建个人网站?
如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)
PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】
Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明
详解Oracle修改字段类型方法总结
创业网站制作流程,创业网站可靠吗?
QQ浏览器网页版登录入口 个人中心在线进入
JavaScript Ajax实现异步通信
制作企业网站建设方案,怎样建设一个公司网站?
如何在Windows服务器上快速搭建网站?
Laravel怎么连接多个数据库_Laravel多数据库连接配置
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
公司网站制作价格怎么算,公司办个官网需要多少钱?
北京的网站制作公司有哪些,哪个视频网站最好?
Laravel怎么判断请求类型_Laravel Request isMethod用法
如何用免费手机建站系统零基础打造专业网站?
高防服务器租用指南:配置选择与快速部署攻略
如何在搬瓦工VPS快速搭建网站?

