JavaScript高阶函数是以函数为参数或返回函数的函数;map对每个元素做一对一转换生成等长新数组,filter按条件筛选生成子集数组,二者可链式组合实现清晰的数据处理逻辑。

JavaScript高阶函数是指**以函数为参数,或返回函数的函数**。数组上的 map 和 filter 就是最典型、最常用的两个——它们不修改原数组,而是基于规则生成新数组,让数据处理更清晰、安全、可读。
map:对每个元素做统一转换
map 遍历原数组每一项,把回调函数的返回值收集起来,组成一个等长的新数组。
- 原数组不变,新数组长度一定和原数组相同
- 适合做格式化、计算、提取属性等“一对一映射”操作
- 回调函数接收三个参数:当前元素、索引、原数组(后两者常省略)
示例:
把数字数组全部翻倍
立即学习“Java免费学习笔记(深入)”;
const nums = [2, 4, 6];
const doubled = nums.map(n => n * 2); // [4, 8, 12]
从用户对象中只取姓名
const users = [{name: 'Tom', age: 28}, {name: 'Lily', age: 22}];
const names = users.map(u => u.name); // ['Tom', 'Lily']filter:按条件筛选出子集
filter 遍历原数组,对每一项执行回调函数;只有返回 true 的元素才会进入新数组。
- 新数组长度 ≤ 原数组长度
- 回调必须明确返回布尔值(
true留下,false跳过) - 常用于数据清洗、权限过滤、状态筛选等场景
示例:
挑出所有偶数
const nums = [1, 2, 3, 4, 5, 6];
const evens = nums.filter(n => n % 2 === 0); // [2, 4, 6]
只保留年龄大于 25 的用户
const adults = users.filter(u => u.age > 25); // [{name: 'Tom', age: 28}]map 和 filter 可以链式组合使用
先 filter 再 map 是常见模式,逻辑清晰、无需中间变量。
示例:获取所有成年用户的姓名大写
const result = users
.filter(u => u.age > 25)
.map(u => u.name.toUpperCase()); // ['TOM']
这种写法表达意图直接,也便于后续扩展(比如再加 sort 或 reduce)。











