原生JS forEach()和map()遍历的区别、兼容写法及jQuery $.each、$.map遍历操作


Posted in jQuery onFebruary 27, 2019

本文实例讲述了原生JS forEach()和map()遍历的区别、兼容写法及jQuery $.each、$.map遍历操作。分享给大家供大家参考,具体如下:

一、原生JS forEach()和map()遍历

共同点:

①.都是循环遍历数组中的每一项。

②.forEach()map() 里面每一次执行匿名函数都支持3个参数:数组中的当前项item,当前项的索引index,原始数组input。

③.匿名函数中的this都是指Window。

④.只能遍历数组。

1.forEach()

没有返回值。

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);//-->会对原来的数组产生改变

2.map()

有返回值,可以return 出来。

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;
}

二、jQuery $.each()和$.map()遍历

共同点:

即可遍历数组,又可遍历对象。

1.$.each()

没有返回值。$.each()里面的匿名函数支持2个参数:当前项的索引i,数组中的当前项n。如果遍历的是对象,k 是键,n 是值。

$.each( ["a","b","c"], function(i, n){
   alert( i + ": " + n );
});
$("span").each(function(i, n){
   alert( i + ": " + n );
});
$.each( { name: "John", lang: "JS" }, function(k, n){
   alert( "Name: " + k + ", Value: " + n );
});

2.$.map()

有返回值,可以return 出来。$.map()里面的匿名函数支持2个参数和$.each()里的参数位置相反:数组中的当前项n,当前项的索引i。如果遍历的是对象,i 是值,n 是键。如果是$("span").map()形式,参数顺序和$.each()  $("span").each()一样。

var arr=$.map( [0,1,2], function(n){
   return n + 4;
});
console.log(arr);
$.map({"name":"Jim","age":17},function(i,n){
   console.log(i+":"+n);
});

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

jQuery 相关文章推荐
jquery.uploadifive插件怎么解决上传限制图片或文件大小问题
May 08 jQuery
基于jQuery封装的分页组件
Jun 26 jQuery
深入研究jQuery图片懒加载 lazyload.js使用方法
Aug 16 jQuery
jQuery UI Draggable + Sortable 结合使用(实例讲解)
Sep 07 jQuery
jQuery响应滚动条事件功能示例
Oct 14 jQuery
jQuery实现页码跳转式动态数据分页
Dec 31 jQuery
jQuery实现模糊查询的方法分析
May 10 jQuery
JQuery实现ajax请求的示例和注意事项
Dec 10 jQuery
jquery添加div实现消息聊天框
Feb 08 jQuery
jquery实现简单自动轮播图效果
Jul 29 jQuery
jQuery实现开关灯效果
Aug 02 jQuery
jQuery实现可以计算进制转换的计算器
Oct 19 jQuery
js/jquery遍历对象和数组的方法分析【forEach,map与each方法】
Feb 27 #jQuery
jQuery表单元素过滤选择器用法实例分析
Feb 20 #jQuery
jQuery内容过滤选择器与子元素过滤选择器用法实例分析
Feb 20 #jQuery
jQuery选择器之基本过滤选择器用法实例分析
Feb 19 #jQuery
jQuery选择器之层次选择器用法实例分析
Feb 19 #jQuery
jQuery选择器之基本选择器用法实例分析
Feb 19 #jQuery
jQuery实现为table表格动态添加或删除tr功能示例
Feb 19 #jQuery
You might like
绿山咖啡和蓝山咖啡
2021/03/04 新手入门
php echo()和print()、require()和include()函数区别说明
2010/03/27 PHP
实例讲解PHP面向对象之多态
2014/08/20 PHP
PHP中开启gzip压缩的2种方法
2015/01/31 PHP
浅析php中array_map和array_walk的使用对比
2016/11/20 PHP
20个非常有用的PHP类库 加速php开发
2010/01/15 Javascript
在Javascript里访问SharePoint列表数据的实现方法
2011/05/22 Javascript
JS批量操作CSS属性详细解析
2013/12/16 Javascript
JS实现的简洁二级导航菜单雏形效果
2015/10/13 Javascript
使用Jasmine和Karma对AngularJS页面程序进行测试
2016/03/05 Javascript
AngularJS 过滤器的简单实例
2016/07/27 Javascript
详解AngularJs中$sce与$sceDelegate上下文转义服务
2016/09/21 Javascript
jQuery通过改变input的type属性实现密码显示隐藏切换功能
2017/02/08 Javascript
移动端触屏幻灯片图片切换插件idangerous swiper.js
2017/04/10 Javascript
jQuery中元素选择器(element)简单用法示例
2018/05/14 jQuery
详解在vue-cli项目下简单使用mockjs模拟数据
2018/10/19 Javascript
vue项目打包后怎样优雅的解决跨域
2019/05/26 Javascript
[01:10:58]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
使用python装饰器验证配置文件示例
2014/02/24 Python
python使用7z解压apk包的方法
2015/04/18 Python
浅谈Matplotlib简介和pyplot的简单使用——文本标注和箭头
2018/01/09 Python
Python中按键来获取指定的值
2019/03/02 Python
Django框架登录加上验证码校验实现验证功能示例
2019/05/23 Python
利用python在大量数据文件下删除某一行的例子
2019/08/21 Python
python扫描线填充算法详解
2020/02/19 Python
python requests.get带header
2020/05/05 Python
html5指南-4.使用Geolocation实现定位功能
2013/01/07 HTML / CSS
探索HTML5本地存储功能运用技巧
2016/03/02 HTML / CSS
HTML5实现多张图片上传功能
2016/03/11 HTML / CSS
yy婚礼司仪主持词
2014/03/14 职场文书
合作协议书
2014/04/23 职场文书
产品陈列协议书(标准版)
2014/09/17 职场文书
超市员工辞职信范文
2015/05/12 职场文书
爱国电影观后感
2015/06/19 职场文书
redis通过6379端口无法连接服务器(redis-server.exe闪退)
2021/05/08 Redis
Python实现学生管理系统(面向对象版)
2021/06/24 Python