位置: 编程技术 - 正文

Javascript中Array.prototype.map()详解

发布时间:2024-02-27

推荐整理分享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构造函数继承)

  • 工资表怎么导入个税系统计算个税
  • 企业纳税证明是什么
  • 资产负债表不平衡如何查找
  • 百旺税控盘自己用不了
  • 查验发票会显示名字吗
  • 小企业会计利润报表
  • 自己申报个人所得税需要补缴,必须自己申报自己补缴吗
  • 电子发票手动导出的发票在哪里
  • 滞留票怎么做账务处理
  • 新开商贸公司怎么做账和报税
  • 房产原值怎么计算房产面积
  • 委托加工消费税纳税义务发生时间
  • 财产行为税计税依据
  • 法院案件受理费计算器
  • 仪器检测费发票哪一类
  • 企业停产或停业期间的费用包括
  • 其他应收款在什么方
  • 发票红冲钱怎么退给对方
  • 付款小于发票金额的原因
  • 投资利息收入要交所得税吗
  • 红冲增值税专用发票需要收回原发票吗
  • 金税三期退税
  • 三证合一后有效期多久
  • 宜宾劳务公司有哪些
  • 享受小型微利企业标准
  • 筹建期间所得税
  • postman入门
  • 应付票据抵付应付账款
  • 最早在哪一年手机可以上网
  • PHP:zip_close()的用法_Zip函数
  • php __invoke
  • 提取公益金会计科目
  • Chateau de Castelnaud in Perigord, France (© Peter Adams/Offset by Shutterstock)
  • 企业长期资金来源有哪些
  • 业务招待费计入什么会计科目
  • 其他综合收益与营业外收入的区别
  • 票折怎么操作
  • 账载折旧金额填哪个数
  • 暂估成本多了
  • 国外货物进入保税仓需要办理什么
  • 材料采购账务处理思维图怎么做
  • 基金管理公司是什么意思
  • 资产负债表中其他流动资产包括哪些
  • 工程施工的间接费用年底可以不结转吗
  • 税控系统全额抵扣增值税申报
  • 给聘用人员每月多少钱
  • 如何理解什么是半殖民地半封建社会
  • 销售产品收到现款120元是什么制
  • 装修费用一次性税前扣除
  • 企业当年实现的净利润即为企业当年可供分配的利润
  • 增值税留抵退税最新政策
  • 职工体检可以从工会经费支出
  • 收到融资租赁发票要交印花税吗
  • 科目余额表上的销项税额贷方余额表示
  • 工业企业生产什么
  • win10预览版21390
  • windows微软官方
  • linux extundelete
  • apache 443
  • windows log在哪里
  • 虚拟机怎样用
  • win102021年1月大更新
  • centos zsh
  • win10 1511(win10 TH2)如何调整开始屏幕磁贴大小?
  • windows8.1应用商店打不开
  • linux 管道实现
  • 笔记本怎么设置定时关机
  • Win7系统打开文件夹没有自动排列选项
  • 相机跟随人物移动
  • vue中父子组件如何通信的
  • JQuery中Ajax()的data参数类型实例分析
  • javascript的语句
  • jquery图片自动滚动
  • ASP小贴士/ASP Tips javascript tips可以当桌面
  • android 自定义dialog
  • android系统主要特点
  • android高级开发实战------ui、ndk与安全
  • 未清卡会锁死吗?
  • 国家税务总局发票查询官网
  • 河北省国家税务局长简介
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号