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支持带x身份证号码验证函数
Aug 10 Javascript
jQuery弹出层插件简化版代码下载
Oct 16 Javascript
js下用eval生成JSON对象
Sep 17 Javascript
jquery 文本上下无缝滚动,鼠标放上去就停止 小例子
Jun 05 Javascript
JavaScript判断一个字符串是否包含指定子字符串的方法
Mar 18 Javascript
ES6记录异步函数的执行时间详解
Aug 31 Javascript
AngularJs html compiler详解及示例代码
Sep 01 Javascript
jQuery基于ajax实现页面加载后检查用户登录状态的方法
Feb 10 Javascript
jquery.validate.js 多个相同name的处理方式
Jul 10 jQuery
使用JQ完成表格隔行换色的简单实例
Aug 25 Javascript
在vue中多次调用同一个定义全局变量的实例
Sep 25 Javascript
详解如何用typescript开发koa2的二三事
Nov 13 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
极典R601SW收音机
2021/03/02 无线电
十天学会php之第四天
2006/10/09 PHP
基于jquery的表格排序
2010/09/11 Javascript
浅析JavaScript中的类型和对象
2013/11/29 Javascript
jQuery设置与获取HTML,文本和值的简单实例
2014/02/26 Javascript
jQuery事件之键盘事件(ctrl+Enter回车键提交表单等)
2014/05/11 Javascript
复制网页内容,粘贴之后自动加上网址的实现方法(脚本之家特别整理)
2014/10/16 Javascript
常用DOM整理
2015/06/16 Javascript
js贪吃蛇网页版游戏特效代码分享(挑战十关)
2015/08/24 Javascript
AngularJS利用Controller完成URL跳转
2016/08/09 Javascript
flexslider.js实现移动端轮播
2017/02/05 Javascript
jq.ajax+php+mysql实现关键字模糊查询(示例讲解)
2018/01/02 Javascript
Nodejs使用archiver-zip-encrypted库加密压缩文件时报错(解决方案)
2019/11/18 NodeJs
编写一个javascript元循环求值器的方法
2020/04/14 Javascript
简单谈谈offsetleft、offsetTop和offsetParent
2020/12/04 Javascript
[40:17]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第一场
2018/04/06 DOTA
详解Python中的文本处理
2015/04/11 Python
python+matplotlib演示电偶极子实例代码
2018/01/12 Python
对numpy和pandas中数组的合并和拆分详解
2018/04/11 Python
利用python实现冒泡排序算法实例代码
2019/12/01 Python
在django中自定义字段Field详解
2019/12/03 Python
Python 解决OPEN读文件报错 ,路径以及r的问题
2019/12/19 Python
python实现将range()函数生成的数字存储在一个列表中
2020/04/02 Python
用python给csv里的数据排序的具体代码
2020/07/17 Python
了解一下python内建模块collections
2020/09/07 Python
Pycharm常用快捷键总结及配置方法
2020/11/14 Python
CSS3 实现侧边栏展开收起动画
2014/12/22 HTML / CSS
澳大利亚时尚前卫设计师珠宝在线:Amber Sceats
2017/10/04 全球购物
FC-Moto西班牙:摩托车手最大的购物场所之一
2019/04/11 全球购物
美国亚马逊旗下男装网站:East Dane(支持中文)
2019/09/25 全球购物
Swanson中国官网:美国斯旺森健康产品公司
2021/03/01 全球购物
女方婚礼新郎答谢词
2014/01/11 职场文书
化工工艺设计求职信
2014/06/25 职场文书
我爱家乡演讲稿
2014/09/12 职场文书
代办出身证明书
2014/10/21 职场文书
yyds什么意思?90后已经听不懂00后讲话了……
2022/02/03 杂记