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 相关文章推荐
滚动条响应鼠标滑轮事件实现上下滚动的js代码
Jun 30 Javascript
原生js实现吸顶效果
Mar 13 Javascript
JS实现线性表的顺序表示方法示例【经典数据结构】
Apr 11 Javascript
Vue.js 2.0 移动端拍照压缩图片预览及上传实例
Apr 27 Javascript
jQuery初级教程之网站品牌列表效果
Aug 02 jQuery
AngularJs用户登录问题处理(交互及验证、阻止FQ处理)
Oct 26 Javascript
vue组件父子间通信详解(三)
Nov 07 Javascript
微信小程序实现图片预览功能
Jan 31 Javascript
Vue手把手教你撸一个 beforeEnter 钩子函数
Apr 24 Javascript
echarts同一页面中四个图表切换的js数据交互方法示例
Jul 03 Javascript
KnockoutJS数组比较算法实例详解
Nov 25 Javascript
bootstrapValidator表单校验、更改状态、新增、移除校验字段的实例代码
May 19 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提取字符串中的图片地址[正则表达式]
2011/11/12 PHP
php警告Creating default object from empty value 问题的解决方法
2014/04/02 PHP
PHP实现加强版加密解密类实例
2015/07/29 PHP
javascript检查日期格式的函数[比较全]
2008/10/17 Javascript
网页上的Javascript编辑器和代码格式化
2010/04/25 Javascript
jquery学习笔记 用jquery实现无刷新登录
2011/08/08 Javascript
用js控制组织结构图可以任意拖拽到指定位置
2014/01/17 Javascript
js无刷新操作table的行和列
2014/03/27 Javascript
JQuery的ON()方法支持的所有事件罗列
2015/02/28 Javascript
jQuery.ajax实现根据不同的Content-Type做出不同的响应
2016/11/03 Javascript
BootStrap 实现各种样式的进度条效果
2016/12/07 Javascript
一个炫酷的Bootstrap导航菜单
2016/12/28 Javascript
教你用Cordova打包Vue项目的方法
2017/10/17 Javascript
React Native实现地址挑选器功能
2017/10/24 Javascript
jQuery实现适用于移动端的跑马灯抽奖特效示例
2019/01/18 jQuery
小程序实现订单倒计时功能
2019/04/23 Javascript
详谈vue中router-link和传统a链接的区别
2020/07/22 Javascript
Python字符遍历的艺术
2008/09/06 Python
Python实现在tkinter中使用matplotlib绘制图形的方法示例
2018/01/18 Python
Python3自动签到 定时任务 判断节假日的实例
2018/11/13 Python
在Qt5和PyQt5中设置支持高分辨率屏幕自适应的方法
2019/06/18 Python
Python画图实现同一结点多个柱状图的示例
2019/07/07 Python
基于Python实现大文件分割和命名脚本过程解析
2019/09/29 Python
详解python tkinter模块安装过程
2020/01/06 Python
Python字符串格式化常用手段及注意事项
2020/06/17 Python
Python爬虫回测股票的实例讲解
2021/01/22 Python
CSS实现定位元素居中的方法
2015/06/23 HTML / CSS
英国最大的线上保健品零售商之一:Vitamin Planet
2016/12/01 全球购物
高中生的学习总结自我鉴定
2013/10/26 职场文书
高级工程师英文求职信
2014/03/19 职场文书
环保宣传标语
2014/06/12 职场文书
大学校园招聘会感想
2015/08/10 职场文书
高二英语教学反思
2016/03/03 职场文书
zabbix监控mysql的实例方法
2021/06/02 MySQL
Mysql超详细讲解死锁问题的理解
2022/04/01 MySQL
TypeScript 使用 Tuple Union 声明函数重载
2022/04/07 Javascript