map和filter本质是高阶函数,需手动实现遍历+回调调用+结果收集:mymap遍历原数组,传入元素、索引、原数组给回调,收集返回值;myfilter遍历并用回调判断,只收集真值对应元素。

JavaScript 中的 map 和 filter 本质就是高阶函数——它们接收一个函数作为参数,并返回一个新数组。自己实现这两个方法,关键在于理解“遍历 + 回调函数调用 + 收集结果”的逻辑,不依赖内置方法。
手动实现 map:对每个元素执行函数并收集返回值
map 的核心是:遍历原数组,把每个元素、索引、原数组本身传给用户传入的回调函数,将每次调用的返回值组成一个新数组。
示例实现:
function myMap(arr, fn) {
const result = [];
for (let i = 0; i // 使用示例
const nums = [1, 2, 3];
const doubled = myMap(nums, x => x * 2); // [2, 4, 6]手动实现 filter:根据回调返回值决定是否保留当前元素
filter 的关键是:对每个元素执行回调函数,若返回值为真值(truthy),就将该元素推入结果数组。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
示例实现:
function myFilter(arr, predicate) {
const result = [];
for (let i = 0; i // 使用示例
const numbers = [1, 2, 3, 4, 5];
const evens = myFilter(numbers, x => x % 2 === 0); // [2, 4]统一用高阶函数思想封装:支持任意遍历逻辑
可以把遍历逻辑抽离,写一个通用的高阶迭代器,再基于它派生 map 和 filter:
- 先写一个
myEach,只负责遍历和调用回调 -
myMap在myEach基础上收集返回值 -
myFilter在myEach基础上按条件收集原值
function myEach(arr, fn) {
for (let i = 0; i function myMap(arr, fn) {
const res = [];
myEach(arr, (item, i, a) => res.push(fn(item, i, a)));
return res;
}<p>function myFilter(arr, predicate) {
const res = [];
myEach(arr, (item, i, a) => {
if (predicate(item, i, a)) res.push(item);
});
return res;
}</p>注意点:保持纯函数特性
自己实现时要避免副作用:
- 不修改原数组(不使用
push到原数组、不改arr[i]) - 每次调用都返回一个全新数组
- 回调函数参数顺序与原生一致:
(item, index, array) - 不处理稀疏数组或 Symbol 键等边界情况(简易版可忽略,生产环境需补全)
这样写出来的函数,就是地道的高阶函数实践:接受函数、返回函数或新数据结构,且不改变输入源。不复杂但容易忽略细节。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










