JavaScript中Array实例方法map的实现方法

 更新时间:2024年03月24日 08:29:53   作者:Aimilali  
这篇文章主要介绍了JavaScript中Array实例方法map的实现方法,map() 方法创建一个新数组,其结果是原数组中的每个元素都调用一个提供的函数后返回的结果,文中有详细的代码示例供大家参考,需要的朋友可以参考下
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

Array.prototype.map()

map() 方法创建一个新数组,其结果是原数组中的每个元素都调用一个提供的函数后返回的结果。 map() 方法不会改变原数组,然而接受的回调函数可以改变原数组。

语法

map(callbackFn) 
map(callbackFn, thisArg)

参数

map 方法接受两个参数:回调函数 和 指定回调函数中的 this 值。

1、callbackFn:为数组中的每个元素执行的函数。它的返回值作为一个元素被添加到新数组中(是添加不是追加)

该函数被调用时将传入以下参数:

  • currentValue:数组中当前正在处理的元素。
  • index:正在处理的元素在数组中的索引。
  • array:调用了 map() 的数组本身。

2、thisArg(可选):执行 callbackFn 时用作 this 的值。

返回值

一个新数组,每个元素都是回调函数的返回值。

用法

第一种(推荐)

const array = [1, 2, 3]
const newArray = array.map((currentValue, index, array) => {
    // 返回新数组中的元素值
    return currentValue + 1
})
// [2, 3, 4]

第二种(基于 this 进行操作时)

const thisArg = { name: 'Aimilali' }
const array = [1, 2, 3]
const newArray = array.map(function (currentValue, index, array) {
    // 返回新数组中的元素值
    return this.name + currentValue
}, thisArg)
// ['Aimilali1', 'Aimilali2', 'Aimilali3']

描述

map() 方法是一个迭代方法。它为数组中的每个元素调用一次提供的 callbackFn 函数,并用结果构建一个新数组。

callbackFn 仅在已分配值的数组索引处被调用。它不会在稀疏数组中的空槽处被调用

稀疏数组使用 map() 方法后返回值仍然是稀疏数组。空槽的索引在返回的数组中仍然为空,并且回调函数不会对它们进行调用。

请注意,在第一次调用 callbackFn之前,数组的长度已经被保存。因此:

  • 当开始调用 map() 时,callbackFn 将不会访问超出数组初始长度的任何元素。
  • 对已访问索引的更改不会导致再次在这些元素上调用 callbackFn。
  • 如果数组中一个现有的、尚未访问的元素被 callbackFn 更改,则它传递给 callbackFn 的值将是该元素被修改后的值。被删除的元素则不会被访问

上述类型的并发修改经常导致难以理解的代码,通常应避免(特殊情况除外)。

map() 方法是通用的。它只期望 this 值具有 length 属性和整数键属性。

由于 map 创建一个新数组,在不使用 map 返回的新数组的情况下不推荐使用 map。应该使用 forEach 或 for...of 作为代替。

实现 map 方法

从上面 map 描述总结实现 map 时注意实现这三点。

  • 回调函数调用之前,数组的长度已经被保存。
  • 回调函数不会在稀疏数组中的空槽处被调用。
  • 稀疏数组使用 map() 方法后返回值仍然是稀疏数组。
Array.prototype.myMap = function (fun, context) {
    if (!Object.is(typeof fun, 'function')) {
        throw TypeError(`${typeof fun} is not a function`)
    }
    const length = this.length   // 保存数组长度
    const newArr = Array(length)
    for (let i = 0; i < length; i++) {
        if (Object.hasOwn(this, i)) {  // 跳过稀疏数组
            newArr[i] = fun.call(context, this[i], i, this) // 确保返回值仍然是稀疏数组
        }
    }
    return newArr
}

结语

到这里 Array 实例方法 map 实现完成啦。

JavaScript 中的 Array 类型提供了一系列强大的实例方法。在 Array 实例方法实现系列专栏中,我将深入探讨一些常见的 Array 实例方法,解析它们的实现原理。

如果有错误或者不严谨的地方,请大家务必给予指正,十分感谢。欢迎大家在评论区中讨论。

以上就是JavaScript中Array实例方法map的实现方法的详细内容,更多关于JavaScript Array map实现的资料请关注程序员之家其它相关文章!

相关文章

  • JavaScript验证Email(3种方法)

    JavaScript验证Email(3种方法)

    这篇文章主要介绍了JavaScript验证Email的3种方法,需要的朋友可以参考下
    2015-09-09
  • 微信小程序的运行机制与安全机制解决方案详解

    微信小程序的运行机制与安全机制解决方案详解

    这篇文章主要介绍了微信小程序的运行机制与安全机制解决方案,接触小程序有一段时间了,总得来说小程序开发门槛比较低,但其中基本的运行机制和原理还是要懂的
    2023-02-02
  • js实现多选项切换导航菜单的方法

    js实现多选项切换导航菜单的方法

    这篇文章主要介绍了js实现多选项切换导航菜单的方法,可实现动态生成多选项切换导航菜单的功能,是非常实用的技巧,需要的朋友可以参考下
    2015-02-02
  • 实例分析js和C#中使用正则表达式匹配a标签

    实例分析js和C#中使用正则表达式匹配a标签

    本文通过2个实例,对比分析了在js和c#中使用正则表达式匹配a标签的异同,小伙伴们自己参考下吧,有利于深刻理解正则表达式的使用。
    2014-11-11
  • 微信小程序实现拨打电话功能的示例代码

    微信小程序实现拨打电话功能的示例代码

    这篇文章主要介绍了微信小程序实现拨打电话功能的示例代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • js AspxButton的客户端操作

    js AspxButton的客户端操作

    processOnServer使您可以指定当前Button应该处理客户端的事件或服务器端事件。
    2009-06-06
  • JavaScript 设计模式学习 Factory

    JavaScript 设计模式学习 Factory

    通过接口实现工厂,这是通过List方式显示RSS 等实现代码。
    2009-07-07
  • JS实现css hover操作的方法示例

    JS实现css hover操作的方法示例

    这篇文章主要介绍了JS实现css hover操作的方法,涉及javascript事件响应及页面元素css属性动态操作相关技巧,需要的朋友可以参考下
    2017-04-04
  • 微信小程序实现随机验证码

    微信小程序实现随机验证码

    这篇文章主要为大家详细介绍了微信小程序实现随机验证码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • Javascript中异步等待的深入理解

    Javascript中异步等待的深入理解

    Async / Await是人们期待已久的JavaScript功能,它使使用异步功能更加有趣和易于理解。这篇文章主要给大家介绍了关于Javascript中异步等待的相关资料,需要的朋友可以参考下
    2021-05-05

最新评论

?


http://www.vxiaotou.com