位置: 编程技术 - 正文

Javascript中Array.prototype.map()详解

编辑:rootadmin

推荐整理分享Javascript中Array.prototype.map()详解,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

在我们日常开发中,操作和转换数组是一件很常见的操作,下面我们来看一个实例:

从上例可以看出,所有的操作重复率都比较高,如何来优化呢,幸运的是Ecmascript 5给我们提供了一个map方法,我们可以利用它来优化上例:

从上例看以看出,我们使用map替换掉了for循环部分,从而只需要关心每个元素自身的实现逻辑。关于map方法详情请戳这里。

1.map基本定义:array.map(callback[, thisArg]);

map 方法会给原数组中的每个元素都按顺序调用一次 callback 函数。callback 每次执行后的返回值组合起来形成一个新数组。 callback 函数只会在有值的索引上被调用;那些从来没被赋过值或者使用 delete 删除的索引则不会被调用。

callback 函数会被自动传入三个参数:数组元素,元素索引,原数组本身。

如果 thisArg 参数有值,则每次 callback 函数被调用的时候,this 都会指向 thisArg 参数上的这个对象。如果省略了 thisArg 参数,或者赋值为 null 或 undefined,则 this 指向全局对象 。

Javascript中Array.prototype.map()详解

map 不修改调用它的原数组本身(当然可以在 callback 执行时改变原数组)。

当一个数组运行 map 方法时,数组的长度在调用第一次 callback 方法之前就已经确定。在 map 方法整个运行过程中,不管 callback 函数中的操作给原数组是添加还是删除了元素。map 方法都不会知道,如果数组元素增加,则新增加的元素不会被 map 遍历到,如果数组元素减少,则 map 方法还会认为原数组的长度没变,从而导致数组访问越界。如果数组中的元素被改变或删除,则他们被传入 callback 的值是 map 方法遍历到他们那一刻时的值。

2.map实例:

上例演示了在一个String上使用map方法获取字符串中每个字符所对应的 ASCII 码组成的数组。请注意看打印的console.log(arr)打印的结果。

也许你会有疑问,为什么不是[1,2,3]呢?我们知道parseInt方法可接收两个参数,第一个参数为需要转换的值,第二个参数为进制数,不了解的可以戳这里。当我们使用map方法的时候,callback函数接收三个参数,而parseInt最多只能接收两个参数,以至于第三个参数被直接舍弃,与此同时,parseInt把传过来的索引值当成进制数来使用.从而返回了NaN。看下面的输出结果:

后面两个很容易理解,但是前两个为什么返回1呢?为了解释这个问题,我们看看官方的描述:If radix is undefined or 0 (or absent), JavaScript assumes the following:a) If the input string begins with “0x” or “0X”, radix is (hexadecimal) and the remainder of the string is parsed.b) If the input string begins with “0″, radix is eight (octal) or (decimal). Exactly which radix is chosen is implementation-dependent. ECMAScript 5 specifies that (decimal) is used, but not all browsers support this yet. For this reason always specify a radix when using parseInt.c) If the input string begins with any other value, the radix is (decimal).在第三点中当string为其他值时,进制默认为。

那么我们如何修改才能使上例正常输出呢?看下例:

3.map方法的兼容性:map方法在IE8及以下浏览器不支持,要想兼容老版本的浏览器,可以:

a) Don't use map.b) Use something like es5-shim to make older IE's support map.c) Use the _.map method in Underscore or Lodash for an equivalent utility function.

标签: Javascript中Array.prototype.map()详解

本文链接地址:https://www.jiuchutong.com/biancheng/385645.html 转载请保留说明!

上一篇:javascript数组详解(javascript数组操作方法)

下一篇:Javascript 构造函数详解(javascript构造函数继承)

  • 软件开发费税率17还是6
  • 一般纳税人开普票和专票有什么区别
  • 冲减以前年度多计的管理费用分录
  • 所得税纳税申报表在哪里打印
  • 垫资公司怎么收费50万
  • 补充医疗保险能自己交吗
  • 材料验收入库款项尚未支付
  • 施工企业结算金额怎么算
  • 收取外部客户电费如何结转成本
  • 进口一批原材料,海关核定的关税完税价格
  • 房产赠与税如何征收2021
  • 民间非营利组织有哪些
  • 转登记日下期指的是什么
  • 平销行为如何冲减进项税金
  • 收到分包公司工程发票收入怎么做账
  • 到期赎回的理财有风险吗
  • 生活中都交了哪些朋友
  • 出纳人员赔偿
  • 没有税控盘怎么开票
  • TP-Link TL-WR841N管理员密码(初始密码)是多少
  • 基金收益率
  • 汇算清缴无形资产摊销填哪里
  • win7使用小技巧
  • PHP:stream_get_transports()的用法_Stream函数
  • ngwatch.exe
  • 增值税进项税额属于什么会计科目
  • php7安装教程详解
  • uniapp官方教程
  • Linux | 将SpringBoot+Vue项目部署到服务器上
  • explorer.exe无响应桌面卡死是什么原因
  • 独立核算的分公司可以享受小微企业吗
  • phpcms文档
  • 财务费用的增加记在哪一方
  • 销售免税农产品如何开票
  • python搞自动化
  • dede织梦怎么转成zblog
  • 帝国cms获取当日发布的url链接
  • 化粪池承包合同
  • sql server 2008打开界面
  • 销项税额和进项税额月底怎么结转
  • 矿场维护
  • 办公设备折旧年限规定多少年
  • 实收资本未实缴是否罚款
  • 公司装修费用如何计算
  • 代收物业费有什么风险
  • 软件企业确认收入
  • 持有至到期投资是债权投资吗
  • 暂估入库结转成本
  • 电子发票是否使用
  • 装饰公司收到的礼品
  • 税金及附加科目余额在借方还是贷方
  • 做好成本会计的基础工作主要对企业成本管理有什么意义
  • 会计账簿的装订绳子
  • 工业企业固定资产折旧年限
  • mysql表字段设置默认值
  • sql server m1
  • vmware下ubuntu(linux)与主机文件共享设置的方法
  • linux中samba服务器的设计方案
  • windows软件包2012能删吗
  • mac电脑系统安装
  • Ubuntu操作系统安装步骤
  • winrecon.exe - winrecon是什么进程
  • win8系统如何查看电脑mac物理地址
  • win10预览版和正式版区别
  • win8关闭系统更新
  • win7系统局域网无法看到其他电脑
  • svn下载项目
  • python定时利用QQ邮件发送天气预报的实例
  • linux自动清理磁盘空间
  • node.js介绍
  • linux 查找后缀名文件
  • vb中chr$(13)是什么意思
  • java jsonstring
  • Python虚拟环境创建
  • unity camera fov
  • 1、Android Studio创建android项目
  • 让你略表情包
  • python特性和属性
  • 国家税务总局查发票
  • 如何查询甘肃省博物馆预约成功
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设