JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍


Posted in Javascript onMay 19, 2016

•原理:

•高级浏览器支持forEach方法

语法:forEach和map都支持2个参数:一个是回调函数(item,index,list)和上下文;

•forEach:用来遍历数组中的每一项;这个方法执行是没有返回值的,对原来数组也没有影响;

•数组中有几项,那么传递进去的匿名回调函数就需要执行几次;

•每一次执行匿名函数的时候,还给其传递了三个参数值:数组中的当前项item,当前项的索引index,原始数组input;

•理论上这个方法是没有返回值的,仅仅是遍历数组中的每一项,不对原来数组进行修改;但是我们可以自己通过数组的索引来修改原来的数组;

•forEach方法中的this是ary,匿名回调函数中的this默认是window;

var ary = [12,23,24,42,1];
var res = ary.forEach(function (item,index,input) {
   input[index] = item*10;
})
console.log(res);//-->undefined;
console.log(ary);//-->会对原来的数组产生改变;

•map:和forEach非常相似,都是用来遍历数组中的每一项值的,用来遍历数组中的每一项;

•区别:map的回调函数中支持return返回值;return的是啥,相当于把数组中的这一项变为啥(并不影响原来的数组,只是相当于把原数组克隆一份,把克隆的这一份的数组中的对应项改变了);

•不管是forEach还是map 都支持第二个参数值,第二个参数的意思是把匿名回调函数中的this进行修改。

var ary = [12,23,24,42,1];
var res = ary.map(function (item,index,input) {
   return item*10;
})
console.log(res);//-->[120,230,240,420,10];
console.log(ary);//-->[12,23,24,42,1]

•兼容写法:

•不管是forEach还是map在IE6-8下都不兼容(不兼容的情况下在Array.prototype上没有这两个方法),那么需要我们自己封装一个都兼容的方法,代码如下:

/**
* forEach遍历数组
* @param callback [function] 回调函数;
* @param context [object] 上下文;
*/
Array.prototype.myForEach = function myForEach(callback,context){
  context = context || window;
  if('forEach' in Array.prototye) {
    this.forEach(callback,context);
    return;
  }
  //IE6-8下自己编写回调函数执行的逻辑
  for(var i = 0,len = this.length; i < len;i++) {
    callback && callback.call(context,this[i],i,this);
  }
}
/**
* map遍历数组
* @param callback [function] 回调函数;
* @param context [object] 上下文;
*/
Array.prototype.myMap = function myMap(callback,context){
  context = context || window;
  if('map' in Array.prototye) {
    return this.map(callback,context);
  }
  //IE6-8下自己编写回调函数执行的逻辑
  var newAry = [];
  for(var i = 0,len = this.length; i < len;i++) {
    if(typeof callback === 'function') {
      var val = callback.call(context,this[i],i,this);
      newAry[newAry.length] = val;
    }
  }
  return newAry;
}

PS:以上写法如有错误欢迎指正,^^

以上这篇JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
基于jQuery的表格操作插件
Apr 22 Javascript
jQuery UI Dialog控件中的表单无法正常提交的解决方法
Dec 19 Javascript
基于jquery实现漂亮的动态信息提示效果
Aug 02 Javascript
javascript 随机展示头像实现代码
Dec 06 Javascript
显示今天的日期js代码(阳历和农历)
Sep 30 Javascript
JS打开新窗口防止被浏览器阻止的方法
Jan 03 Javascript
IE10中flexigrid无法显示数据的解决方法
Jul 26 Javascript
javascript动态添加checkbox复选框的方法
Dec 23 Javascript
所见即所得的富文本编辑器bootstrap-wysiwyg使用方法详解
May 27 Javascript
详谈js使用in和hasOwnProperty获取对象属性的区别
Apr 25 Javascript
js实现移动端吸顶效果
Jan 08 Javascript
Electron实现应用打包、自动升级过程解析
Jul 07 Javascript
当jquery ajax遇上401请求的解决方法
May 19 #Javascript
基于Echarts 3.19 制作常用的图形(非静态)
May 19 #Javascript
前端js文件合并的三种方式推荐
May 19 #Javascript
Node.js+Express配置入门教程
May 19 #Javascript
JavaScript中解决多浏览器兼容性23个问题的快速解决方法
May 19 #Javascript
判断数组是否包含某个元素的js函数实现方法
May 19 #Javascript
JQuery 在文档中查找指定name的元素并移除的实现方法
May 19 #Javascript
You might like
PHP explode()函数用法讲解
2019/02/15 PHP
tp5递归 无限级分类详解
2019/10/18 PHP
jquery.Jwin.js 基于jquery的弹出层插件代码
2012/05/23 Javascript
利用JS判断用户是否上网(连接网络)
2013/12/23 Javascript
js 判断图片是否加载完以及实现图片的预下载
2014/08/14 Javascript
APP中javascript+css3实现下拉刷新效果
2016/01/27 Javascript
JavaScript基本类型值-Undefined、Null、Boolean
2017/02/23 Javascript
JS异步加载的三种实现方式
2017/03/16 Javascript
详解Vue整合axios的实例代码
2017/06/21 Javascript
webpack教程之webpack.config.js配置文件
2017/07/05 Javascript
vue 组件 全局注册和局部注册的实现
2018/02/28 Javascript
深入理解 Koa 框架中间件原理
2018/10/18 Javascript
深入学习js函数的隐式参数 arguments 和 this
2019/06/24 Javascript
基于jsbarcode 生成条形码并将生成的条码保存至本地+源码
2020/04/27 Javascript
python使用scrapy解析js示例
2014/01/23 Python
python轻松实现代码编码格式转换
2015/03/26 Python
Python3实现腾讯云OCR识别
2018/11/27 Python
Python字符串通过'+'和join函数拼接新字符串的性能测试比较
2019/03/05 Python
树莓派使用python-librtmp实现rtmp推流h264的方法
2019/07/22 Python
详解Python time库的使用
2019/10/10 Python
python GUI库图形界面开发之PyQt5窗口类QMainWindow详细使用方法
2020/02/26 Python
Python API 操作Hadoop hdfs详解
2020/06/06 Python
详解使用Python写一个向数据库填充数据的小工具(推荐)
2020/09/11 Python
世界上最大的在线学习和教学市场:Udemy
2017/11/08 全球购物
HTC VIVE美国官网:VR虚拟现实眼镜
2018/02/13 全球购物
私有程序集与共享程序集有什么区别
2013/04/05 面试题
C#怎么让一个窗口居中显示?
2015/10/20 面试题
最新的咖啡店创业计划书
2013/12/30 职场文书
党员群众路线承诺书
2014/05/20 职场文书
销售活动策划方案
2014/08/26 职场文书
机关单位工作失职检讨书
2014/11/20 职场文书
小学语文教学随笔
2015/08/14 职场文书
初中物理教学反思
2016/02/19 职场文书
创业计划书之美容店
2019/09/16 职场文书
关于MybatisPlus配置双数据库驱动连接数据库问题
2022/01/22 Java/Android
Go并发4种方法简明讲解
2022/04/06 Golang