js map实现
使用 Array.prototype.map 实现数组转换
map 是 JavaScript 数组的高阶函数,用于遍历数组并返回一个新数组,新数组的元素是原数组元素经过回调函数处理后的结果。基本语法如下:
const newArray = originalArray.map((currentValue, index, array) => {
// 返回处理后的值
});
currentValue:当前处理的数组元素。index(可选):当前元素的索引。array(可选):原数组。
示例:将数字数组每个元素乘以 2

const numbers = [1, 2, 3];
const doubled = numbers.map(num => num * 2); // [2, 4, 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 squares = customMap([1, 2, 3], num => num * num); // [1, 4, 9]
处理稀疏数组
map 会跳过空位(稀疏数组的空槽),但保留空位。手动实现时需注意:
function sparseMap(arr, callback) {
const result = new Array(arr.length);
for (let i = 0; i < arr.length; i++) {
if (i in arr) { // 检查是否存在当前索引
result[i] = callback(arr[i], i, arr);
}
}
return result;
}
// 使用示例
const sparseArr = [1, , 3]; // 第二个元素为空
const mapped = sparseMap(sparseArr, x => x * 2); // [2, empty, 6]
map 与链式调用
map 常与其他数组方法(如 filter、reduce)链式调用:
const data = [1, 2, 3, 4];
const processed = data
.filter(x => x % 2 === 0) // 筛选偶数 [2, 4]
.map(x => x * 10); // 转换为 [20, 40]
注意事项
- 不修改原数组:
map返回新数组,原数组不变。 - 回调函数返回值:必须有明确的返回值,否则新数组对应位置为
undefined。 - 性能考虑:大数据量时,链式调用可能产生中间数组,可用
for循环优化。
通过以上方法,可以灵活使用 map 或自定义实现类似功能。






