原生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插件FusionCharts实现的MSBar3D图效果示例【附demo源码】
Mar 23 jQuery
jQuery tip提示插件(实例分享)
Apr 28 jQuery
jQuery Validate表单验证插件实现代码
Jun 08 jQuery
jQuery常用选择器详解
Jul 17 jQuery
使用jQuery实现简单的tab框实例
Aug 22 jQuery
jquery实现左右轮播图效果
Sep 28 jQuery
jQuery实现table表格checkbox全选的方法分析
Jul 04 jQuery
解决jQuery使用append添加的元素事件无效的问题
Aug 30 jQuery
jQuery对底部导航进行跳转并高亮显示的实例代码
Apr 23 jQuery
jquery实现掷骰子小游戏
Oct 24 jQuery
jQuery实现计算器功能
Oct 19 jQuery
ajax jquery实现页面某一个div的刷新效果
Mar 04 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
用DBSQL类加快开发MySQL数据库程序的速度
2006/10/09 PHP
php基础学习之变量的使用
2011/06/09 PHP
php5.3中连接sqlserver2000的两种方法(com与ODBC)
2012/12/29 PHP
浏览器预览PHP文件时顶部出现空白影响布局分析原因及解决办法
2013/01/11 PHP
php object转数组示例
2014/01/15 PHP
php语言的7种基本的排序方法
2020/12/28 PHP
微信公众平台开发教程②微信端分享功能图文详解
2019/04/10 PHP
PHP设计模式入门之状态模式原理与实现方法分析
2020/04/26 PHP
js 纯数字不重复排列的另类方法
2010/07/17 Javascript
jquery实现的让超出显示范围外的导航自动固定屏幕最顶上
2011/09/22 Javascript
Jquery中的CheckBox、RadioButton、DropDownList的取值赋值实现代码
2011/10/12 Javascript
javascript自定义右键弹出菜单实现方法
2015/05/25 Javascript
asp知识整理笔记3(问答模式)
2015/09/27 Javascript
JS如何判断是否为ie浏览器的方法(包括IE10、IE11在内)
2015/12/13 Javascript
基于JavaScript实现瀑布流布局(二)
2016/01/26 Javascript
利用JQuery直接调用asp.net后台的简单方法
2016/10/27 Javascript
Jquery 整理元素选取、常用方法一览表
2016/11/26 Javascript
基于jquery的on和click的区别详解
2018/01/15 jQuery
vue移动UI框架滑动加载数据的方法
2018/03/12 Javascript
vue-cli 打包后提交到线上出现 &quot;Uncaught SyntaxError:Unexpected token&quot; 报错
2018/11/06 Javascript
利用 python 对目录下的文件进行过滤删除
2017/12/27 Python
Python使用POP3和SMTP协议收发邮件的示例代码
2019/04/16 Python
python实现拉普拉斯特征图降维示例
2019/11/25 Python
Pytorch根据layers的name冻结训练方式
2020/01/06 Python
浅析python 字典嵌套
2020/09/29 Python
python 如何把docker-compose.yaml导入到数据库相关条目里
2021/01/15 Python
澳大利亚领先的武术用品和健身器材供应商:SMAI
2019/03/24 全球购物
super关键字的用法
2012/04/10 面试题
医药工作岗位求职信分享
2013/12/31 职场文书
房屋转让协议书范本
2014/04/11 职场文书
新闻编辑专业自荐信
2014/07/02 职场文书
本溪关门山导游词
2015/02/09 职场文书
幼儿园园长安全责任书
2015/05/08 职场文书
毕业季聚会祝酒词!
2019/07/04 职场文书
解决pycharm安装scrapy DLL load failed:找不到指定的程序的问题
2021/06/08 Python
浅析JavaScript中的变量提升
2022/06/01 Javascript