map、filter、reduce是JavaScript中不修改原数组、返回新数组或单值的三大高阶函数:map逐项转换生成等长新数组;filter筛选符合条件元素;reduce聚合计算生成任意类型结果。
JavaScript数组方法中,map、filter和reduce是最常用也最强大的三个高阶函数。它们不修改原数组,返回新数组或单个值,配合纯函数使用能写出更清晰、可维护的代码。
map用于对数组每一项执行相同操作,返回一个结构一致但内容更新的新数组。关键点是“一一对应”——输入几个元素,输出就几个元素,顺序不变。
arr.map(x => x * 2).filter(x => x > 1
0)
示例:把用户列表转成只含姓名和ID的对象数组
const users = [{id: 1, name: 'Alice', age: 28}, {id: 2, name: 'Bob', age: 32}];filter返回一个新数组,只包含让回调函数返回true的项。它不会改变原数组,也不会跳过空位(稀疏数组中undefined仍会被检查)。
return true/false,避免隐式转换出错示例:获取所有成年人并提取姓名
const adults = users.filter(u => u.age >= 18).map(u => u.name);reduce把数组“收拢”成一个值,可以是数字、对象、数组甚至Promise。它接收两个参数:累加器(previousValue)和当前项(currentValue),还可选传入初始值。
arr.reduce(groupByCategory, {})
示例:按城市统计用户数量
const data = [{name: 'A', city: 'Beijing'}, {name: 'B', city: 'Shanghai'}, {name: 'C', city: 'Beijing'}];arr.map(...).filter(...).map(...).reduce(...),可考虑封装为带名字的函数