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 图片延迟加载并等比缩放插件
Nov 09 Javascript
在一个浏览器里呈现所有浏览器测试结果的前端测试工具的思路
Mar 02 Javascript
jQuery 源码分析笔记(3) Deferred机制
Jun 19 Javascript
JavaScript仿商城实现图片广告轮播实例代码
Feb 06 Javascript
js获取浏览器高度 窗口高度 元素尺寸 偏移属性的方法
Nov 21 Javascript
Angular.js与node.js项目里用cookie校验账户登录详解
Feb 22 Javascript
javascript中replace使用方法总结
Mar 01 Javascript
EasyUI在Panel上动态添加LinkButton按钮
Aug 11 Javascript
利用Node.js了解与测量HTTP所花费的时间详解
Sep 22 Javascript
vue2中的keep-alive使用总结及注意事项
Dec 21 Javascript
Angular项目如何升级至Angular6步骤全纪录
Sep 03 Javascript
如何在vue中使用jointjs过程解析
May 29 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下利用header()函数设置浏览器缓存的代码
2010/09/01 PHP
destoon官方标签大全
2014/06/20 PHP
php实现curl模拟ftp上传的方法
2015/07/29 PHP
PHP curl批处理及多请求并发实现方法分析
2018/08/15 PHP
Laravel框架Request、Response及Session操作示例
2019/05/06 PHP
YII2框架使用控制台命令的方法分析
2020/03/18 PHP
一个简单的网站访问JS计数器 刷新1次加1次访问
2012/09/20 Javascript
js获取IP和PcName(IE)在vs中可用
2013/08/02 Javascript
中文输入法不触发onkeyup事件的解决办法
2014/07/09 Javascript
整理AngularJS中的一些常用指令
2015/06/16 Javascript
javascript 动态修改css样式方法汇总(四种方法)
2015/08/27 Javascript
Bootstrap所支持的表单控件实例详解
2016/05/16 Javascript
Bootstrap菜单按钮及导航实例解析
2016/09/09 Javascript
Javascript中this绑定的3种方法与比较
2016/10/13 Javascript
yarn与npm的命令行小结
2016/10/20 Javascript
简单实现JS倒计时效果
2016/12/23 Javascript
详解webpack自定义loader初探
2018/08/29 Javascript
Nuxt.js实战和配置详解
2019/08/05 Javascript
Vuex实现购物车小功能
2020/08/17 Javascript
JavaScript实现随机点名小程序
2020/10/29 Javascript
Python删除windows垃圾文件的方法
2015/07/14 Python
Python3学习笔记之列表方法示例详解
2017/10/06 Python
matplotlib subplots 调整子图间矩的实例
2018/05/25 Python
Django缓存系统实现过程解析
2019/08/02 Python
python实现飞机大战游戏(pygame版)
2020/10/26 Python
Python批量安装卸载1000个apk的方法
2020/04/10 Python
在pycharm中创建django项目的示例代码
2020/05/28 Python
Python趣味实例,实现一个简单的抽奖刮刮卡
2020/07/18 Python
CSS3实战第一波 让我们尽情的圆角吧
2010/08/27 HTML / CSS
美国最佳在线航班预订网站:LookupFare
2019/03/26 全球购物
女子职高个人自荐书
2014/02/01 职场文书
高中生评语大全
2014/04/25 职场文书
护士节策划方案
2014/05/19 职场文书
校园演讲稿汇总
2014/05/21 职场文书
群众路线查摆问题整改措施
2014/10/10 职场文书
贫困证明怎么写
2015/06/16 职场文书