当前位置:首页 > JavaScript

js map方法 实现

2026-02-02 19:53:04JavaScript

js map方法 实现

map方法的基本用法

JavaScript的map方法是数组原型上的一个高阶函数,用于对数组中的每个元素执行指定操作并返回新数组。语法如下:

js map方法 实现

const newArray = arr.map(callback(currentValue[, index[, array]])[, thisArg])
  • callback:对每个元素执行的函数,接受三个参数:
    • currentValue:当前处理的元素
    • index(可选):当前元素的索引
    • array(可选):原数组
  • thisArg(可选):执行callback时用作this的值

实现自定义map方法

以下是手动实现map方法的Polyfill代码:

Array.prototype.myMap = function(callback, thisArg) {
  if (this == null) {
    throw new TypeError('Array.prototype.myMap called on null or undefined');
  }
  if (typeof callback !== 'function') {
    throw new TypeError(callback + ' is not a function');
  }

  const originalArray = Object(this);
  const len = originalArray.length >>> 0;
  const newArray = new Array(len);

  for (let i = 0; i < len; i++) {
    if (i in originalArray) {
      newArray[i] = callback.call(thisArg, originalArray[i], i, originalArray);
    }
  }

  return newArray;
};

使用示例

const numbers = [1, 2, 3, 4];

// 原生map方法
const squared = numbers.map(x => x * x);
console.log(squared); // [1, 4, 9, 16]

// 自定义myMap方法
const cubed = numbers.myMap(x => x * x * x);
console.log(cubed); // [1, 8, 27, 64]

实现要点说明

  1. 类型检查:确保调用对象不为null/undefined,且callback是函数
  2. 长度处理:使用无符号右移操作符>>> 0确保长度为非负整数
  3. 稀疏数组处理:通过in操作符检查索引是否存在
  4. 上下文绑定:使用call方法确保正确的this绑定

性能考虑

原生map方法通常经过浏览器优化,性能优于手动实现。自定义实现主要用于理解原理或在不支持ES5的环境中使用。实际项目中建议优先使用原生方法。

标签: 方法js
分享给朋友:

相关文章

原生js实现轮播图

原生js实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="slid…

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数: fun…

js实现路由

js实现路由

js实现路由的方法 在JavaScript中实现路由功能可以通过多种方式完成,以下是几种常见的方法: 使用原生JavaScript实现路由 通过监听window.onhashchange事件来实现基…

js实现菜单

js实现菜单

实现基本HTML结构 使用HTML创建菜单的基本框架,通常包含<ul>和<li>元素。示例结构如下: <ul id="menu"> <li><…