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 04 Javascript
jQuery grep()方法详解及实例代码
Oct 30 Javascript
AngularJS指令用法详解
Nov 02 Javascript
JavaScript设计模式之策略模式详解
Jun 09 Javascript
Angular.js中上传指令ng-upload的基本使用教程
Jul 30 Javascript
JS如何设置元素样式的方法示例
Aug 28 Javascript
jQuery插件jsonview展示json数据
May 26 jQuery
vue2.0实现音乐/视频播放进度条组件
Jun 06 Javascript
详解Vue之父子组件传值
Apr 01 Javascript
js实现带有动画的返回顶部
Aug 09 Javascript
js属性对象的hasOwnProperty方法的使用
Feb 05 Javascript
JavaScript仿京东轮播图效果
Feb 25 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/07/04 PHP
PHP PDOStatement对象bindpram()、bindvalue()和bindcolumn之间的区别
2014/11/20 PHP
php类的扩展和继承用法实例
2015/06/20 PHP
Centos 6.5系统下编译安装PHP 7.0.13的方法
2016/12/19 PHP
PHP实现微信提现(企业付款到零钱)
2019/08/01 PHP
JS判断是否为数字,是否为整数,是否为浮点数的代码
2010/04/24 Javascript
javascript中的void运算符语法及使用介绍
2013/03/10 Javascript
js动态添加表格数据使用insertRow和insertCell实现
2014/05/22 Javascript
JavaScript实现模仿桌面窗口的方法
2015/07/18 Javascript
js+html5实现canvas绘制网页时钟的方法
2016/05/21 Javascript
JavaScript核心语法总结(推荐)
2016/06/02 Javascript
Mac系统下Webstorm快捷键整理大全
2017/05/28 Javascript
bootstrap table实现x-editable的行单元格编辑及解决数据Empty和支持多样式问题
2017/08/10 Javascript
详解基于webpack2.x的vue2.x的多页面站点
2017/08/21 Javascript
详解webpack2+node+react+babel实现热加载(hmr)
2017/08/24 Javascript
JavaScript实现元素滚动条到达一定位置循环追加内容
2017/12/28 Javascript
Jquery的autocomplete插件用法及参数讲解
2019/03/12 jQuery
JS解惑之Object中的key是有序的么
2019/05/06 Javascript
原生JS与CSS实现软件卸载对话框功能
2019/12/05 Javascript
Javascript执行上下文顺序的深入讲解
2020/11/04 Javascript
Python break语句详解
2014/03/11 Python
Python统计列表中的重复项出现的次数的方法
2014/08/18 Python
尝试使用Python多线程抓取代理服务器IP地址的示例
2015/11/09 Python
python中pandas.DataFrame对行与列求和及添加新行与列示例
2017/03/12 Python
Python如何基于smtplib发不同格式的邮件
2019/12/30 Python
python输出pdf文档的实例
2020/02/13 Python
python实现QQ邮箱发送邮件
2020/03/06 Python
HTML5本地存储之Web Storage详解
2016/07/04 HTML / CSS
Mountain Warehouse澳大利亚官网:欧洲家庭户外品牌倡导者
2016/11/20 全球购物
Links of London官方网站:英国标志性的珠宝品牌
2017/04/09 全球购物
电气工程及其自动化学生实习自我鉴定
2013/09/19 职场文书
Python使用Kubernetes API访问集群
2021/05/30 Python
nginx的zabbix 5.0安装部署的方法步骤
2021/07/16 Servers
postgresql使用filter进行多维度聚合的解决方法
2021/07/16 PostgreSQL
Vue操作Storage本地化存储
2022/04/29 Vue.js
Python TypeError: ‘float‘ object is not subscriptable错误解决
2022/12/24 Python