原生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插件之validation插件
Mar 29 jQuery
jQuery EasyUI之验证框validatebox实例详解
Apr 10 jQuery
jquery自定义显示消息数量
Dec 19 jQuery
jQuery实现文件编码成base64并通过AJAX上传的方法
Apr 12 jQuery
jQuery实现带右侧索引功能的通讯录示例【附源码下载】
Apr 17 jQuery
Angular5中调用第三方库及jQuery的添加的方法
Jun 07 jQuery
jquery实现搜索框功能实例详解
Jul 23 jQuery
jQuery实现鼠标移入移出事件切换功能示例
Sep 06 jQuery
Jquery遍历筛选数组的几种方法和遍历解析json对象,Map()方法详解以及数组中查询某值是否存在
Jan 18 jQuery
jQuery实现ajax的嵌套请求案例分析
Feb 16 jQuery
jQuery实现滑动星星评分效果(每日分享)
Nov 13 jQuery
jQuery cookie的公共方法封装和使用示例
Jun 01 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
PHP5/ZendEngine2的改进
2006/10/09 PHP
php过滤表单提交的html等危险代码
2014/11/03 PHP
php使用递归计算文件夹大小
2014/12/24 PHP
php+mysql+jquery实现日历签到功能
2017/02/27 PHP
Laravel 5+ .env环境配置文件详解
2020/04/06 PHP
初学Javascript的一些总结
2008/11/03 Javascript
JAVASCRIPT车架号识别/验证函数代码 汽车车架号验证程序
2012/01/08 Javascript
JavaScript基础知识之数据类型
2012/08/06 Javascript
js控制CSS样式属性语法对照表
2012/12/11 Javascript
js遍历子节点子元素附属性及方法
2014/08/19 Javascript
JS验证IP,子网掩码,网关和MAC的方法
2015/07/02 Javascript
怎么通过onclick事件获取js函数返回值(代码少)
2015/07/28 Javascript
Javascript页面跳转常见实现方式汇总
2015/11/28 Javascript
angular双向绑定模拟探索
2016/12/26 Javascript
详解基于Vue cli生成的Vue项目的webpack4升级
2018/06/19 Javascript
webpack4 处理CSS的方法示例
2018/09/03 Javascript
JavaScript 自定义html元素鼠标右键菜单功能
2019/12/02 Javascript
Python求两个list的差集、交集与并集的方法
2014/11/01 Python
利用Python进行异常值分析实例代码
2017/12/07 Python
Window10+Python3.5安装opencv的教程推荐
2018/04/02 Python
python 限制函数执行时间,自己实现timeout的实例
2019/01/12 Python
python 自定义对象的打印方法
2019/01/12 Python
不归路系列:Python入门之旅-一定要注意缩进!!!(推荐)
2019/04/16 Python
numpy:找到指定元素的索引示例
2019/11/26 Python
Python log模块logging记录打印用法解析
2020/01/20 Python
Python3中configparser模块读写ini文件并解析配置的用法详解
2020/02/18 Python
Python面向对象程序设计之继承、多态原理与用法详解
2020/03/23 Python
关于HTML5语义标签的实践(blog页面)
2016/07/12 HTML / CSS
校庆口号
2014/06/20 职场文书
4s店销售经理岗位职责
2014/07/19 职场文书
向国旗敬礼活动小结
2014/09/27 职场文书
讲座通知范文
2015/04/23 职场文书
学校捐书倡议书
2015/04/27 职场文书
刑事申诉状范文
2015/05/20 职场文书
MySQL创建管理LIST分区
2022/04/13 MySQL
SpringCloud中分析讲解Feign组件添加请求头有哪些坑梳理
2022/06/21 Java/Android