当前位置:首页 > JavaScript

js map 实现

2026-04-06 13:35:58JavaScript

map 方法的基本原理

map 是 JavaScript 数组的高阶函数,用于对数组每个元素执行回调函数并返回新数组。其核心特点是不修改原数组,而是通过映射关系生成新数组。

原生 map 用法示例

const numbers = [1, 2, 3];
const doubled = numbers.map(num => num * 2);
console.log(doubled); // 输出: [2, 4, 6]

手动实现 map 的步骤

定义函数框架

创建一个接受回调函数和可选 thisArg 的函数:

function customMap(callback, thisArg) {
  const result = [];
  // 后续逻辑填充
  return result;
}

遍历原数组

使用 for 循环遍历数组的每个元素:

for (let i = 0; i < this.length; i++) {
  // 处理每个元素
}

执行回调并收集结果

对每个元素调用回调函数,并将结果存入新数组:

const mappedValue = callback.call(thisArg, this[i], i, this);
result.push(mappedValue);

完整实现代码

Array.prototype.customMap = function(callback, thisArg) {
  if (typeof callback !== 'function') {
    throw new TypeError(callback + ' is not a function');
  }

  const result = [];
  for (let i = 0; i < this.length; i++) {
    const mappedValue = callback.call(thisArg, this[i], i, this);
    result.push(mappedValue);
  }
  return result;
};

// 使用示例
const arr = [1, 2, 3];
const squared = arr.customMap(x => x * x);
console.log(squared); // 输出: [1, 4, 9]

关键实现细节

  1. 类型检查:确保回调是函数类型
  2. 参数传递:正确处理 thisArg 绑定
  3. 索引传递:提供当前索引和原数组引用
  4. 稀疏数组:原生 map 会跳过空位,此处简化实现

边界情况处理

处理稀疏数组

如需完全模拟原生行为,需增加空位检测:

if (!(i in this)) {
  result.length++; // 保持稀疏性
  continue;
}

链式调用支持

返回的数组可继续调用其他数组方法:

js map 实现

[1, 2, 3]
  .customMap(x => x + 1)
  .filter(x => x > 2); // 输出: [3, 4]

性能优化建议

  1. 提前分配数组长度:
    const result = new Array(this.length);
  2. 避免不必要的类型检查(生产环境可移除)

标签: jsmap
分享给朋友:

相关文章

使用js实现

使用js实现

使用JavaScript实现 JavaScript可以通过Math.random()函数生成随机数,结合其他方法可以实现多种随机数生成需求。 // 生成0到1之间的随机小数 const random…

js 实现滚动

js 实现滚动

实现滚动的方法 使用 window.scrollTo() window.scrollTo() 方法可以滚动到文档中的特定位置。可以指定 x 和 y 坐标,或者使用平滑滚动的选项。 // 滚动到指定位…

js实现轮播代码

js实现轮播代码

基础轮播实现 使用HTML、CSS和JavaScript创建一个简单的轮播效果。HTML部分定义轮播容器和图片元素。 <div class="carousel"> <div c…

js实现乘法

js实现乘法

实现乘法运算的方法 在JavaScript中实现乘法运算可以通过多种方式完成,以下列举几种常见方法: 基础运算符 直接使用乘法运算符*是最简单的方式: let result = 3 * 5; //…

js实现复制功能实现

js实现复制功能实现

使用document.execCommand方法(传统方式,已逐渐被弃用) 传统方式通过document.execCommand('copy')实现复制功能,需先选中文本。以下是一个完整示例: fu…

js 多选 实现

js 多选 实现

实现多选的 JavaScript 方法 使用复选框(Checkbox)实现多选 通过 HTML 的 checkbox 元素配合 JavaScript 实现多选功能。用户可以选择多个选项,提交时获取所有…