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 选择器引擎sizzle浅析
Feb 06 Javascript
Javascript字符串对象的常用方法简明版
Jun 26 Javascript
用Jquery选择器计算table中的某一列某一行的合计
Aug 13 Javascript
js鼠标点击图片切换效果代码分享
Aug 26 Javascript
js中不同的height, top的区别对比
Sep 24 Javascript
利用策略模式与装饰模式扩展JavaScript表单验证功能
Feb 14 Javascript
微信小程序中form 表单提交和取值实例详解
Apr 20 Javascript
vue 做移动端微信公众号采坑经验记录
Apr 26 Javascript
js+HTML5 canvas 实现简单的加载条(进度条)功能示例
Jul 16 Javascript
vue+eslint+vscode配置教程
Aug 09 Javascript
Vue2.0 $set()的正确使用详解
Jul 28 Javascript
vue中 this.$set的使用详解
Nov 17 Vue.js
当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
PHP4 与 MySQL 数据库操作函数详解
2006/12/06 PHP
PHP利用MySQL保存session的实现思路及示例代码
2014/09/09 PHP
php打造智能化的柱状图程序,用于报表等
2015/06/19 PHP
Windows 下安装 swoole 图文教程(php)
2017/06/05 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
2018/03/02 PHP
PHP结合Redis+MySQL实现冷热数据交换应用案例详解
2019/07/09 PHP
PHP语言对接抖音快手小红书视频/图片去水印API接口源码
2020/08/11 PHP
jquery中对表单的基本操作代码
2010/07/29 Javascript
Ajax 数据请求的简单分析
2011/04/05 Javascript
jQuery之网页换肤实现代码
2011/04/30 Javascript
使用js修改客户端注册表的方法
2013/08/09 Javascript
删除select中所有option选项jquery代码
2013/08/12 Javascript
采用自执行的匿名函数解决for循环使用闭包的问题
2014/09/11 Javascript
jQuery遍历json中多个map的方法
2015/02/12 Javascript
BootStrap实现带有增删改查功能的表格(DEMO详解)
2016/10/26 Javascript
javascript另类方法实现htmlencode()与htmldecode()函数实例分析
2016/11/17 Javascript
利用Angularjs中模块ui-route管理状态的方法
2016/12/27 Javascript
JS实现电脑虚拟键盘打字测试
2020/06/24 Javascript
在Python中使用全局日志时需要注意的问题
2015/05/06 Python
详解Python中的日志模块logging
2015/06/19 Python
python3读取MySQL-Front的MYSQL密码
2017/05/03 Python
python3操作mysql数据库的方法
2017/06/23 Python
了解不常见但是实用的Python技巧
2019/05/23 Python
ProBikeKit德国:在线公路自行车专家
2018/06/03 全球购物
印度在线杂货店:bigbasket
2018/08/23 全球购物
给校长的建议书100字
2014/05/16 职场文书
教师求职信
2014/06/17 职场文书
教师批评与自我批评总结
2014/10/16 职场文书
2014年大堂经理工作总结
2014/11/21 职场文书
先进个人评语大全
2015/01/04 职场文书
爱国电影观后感
2015/06/19 职场文书
践行三严三实心得体会(2016推荐篇)
2016/01/06 职场文书
2016大学生形势与政策心得体会
2016/01/12 职场文书
优质服务心得体会(共4篇)
2016/01/22 职场文书
mysql数据库入门第一步之创建表
2021/05/14 MySQL
一次Mysql update sql不当引起的生产故障记录
2022/04/01 MySQL