js 实现map
在 JavaScript 中,map 是一种高阶函数,用于对数组中的每个元素执行指定的操作并返回一个新数组。以下是几种常见的实现方式:
使用原生 Array.prototype.map
原生 map 方法是最直接的方式,接受一个回调函数作为参数:

const arr = [1, 2, 3];
const newArr = arr.map((item) => item * 2);
console.log(newArr); // 输出 [2, 4, 6]
回调函数可以接收三个参数:当前元素、当前索引和原数组:
const arr = [1, 2, 3];
const newArr = arr.map((item, index, array) => {
return item * index;
});
console.log(newArr); // 输出 [0, 2, 6]
手动实现 map 函数
如果需要手动实现 map,可以通过以下方式模拟其行为:

function customMap(arr, callback) {
const result = [];
for (let i = 0; i < arr.length; i++) {
result.push(callback(arr[i], i, arr));
}
return result;
}
const arr = [1, 2, 3];
const newArr = customMap(arr, (item) => item * 2);
console.log(newArr); // 输出 [2, 4, 6]
在对象上实现类似 map 的功能
虽然 map 是数组方法,但可以通过 Object.keys 或 Object.entries 对对象实现类似功能:
const obj = { a: 1, b: 2, c: 3 };
const newObj = Object.fromEntries(
Object.entries(obj).map(([key, value]) => [key, value * 2])
);
console.log(newObj); // 输出 { a: 2, b: 4, c: 6 }
使用 map 处理异步操作
结合 Promise.all 可以处理异步操作:
const arr = [1, 2, 3];
const asyncMap = async (arr, callback) => {
return Promise.all(arr.map(callback));
};
asyncMap(arr, async (item) => {
return item * 2;
}).then(console.log); // 输出 [2, 4, 6]
注意事项
map不会修改原数组,而是返回一个新数组。- 如果回调函数没有返回值,新数组对应位置会是
undefined。 - 稀疏数组(包含空位)的
map行为会跳过空位,但保留空位在结果中。






