原生JS forEach()和map()遍历的区别、兼容写法及jQuery $.each、$.map遍历操作
本文实例讲述了原生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.jb51.net/code/htmljsrun测试上述代码运行效果。
ps:这里再为大家推荐一款js数组遍历方式分析对比工具供大家参考:
在线js常见遍历方式性能分析比较工具:
更多关于javascript相关内容感兴趣的读者可查看本站专题:《javascript数组操作技巧总结》、《javascript遍历算法与技巧总结》、《javascript面向对象入门教程》、《javascript数学运算用法总结》、《javascript数据结构与算法技巧总结》及《javascript错误与调试技巧总结》
希望本文所述对大家javascript程序设计有所帮助。