最近看到关于数组遍历的东西,顺便总结一下 forEach()
和 map()
遍历数组方法的区别。这两个方法都是 ES5
中新增的,当然说到新增方法,不能不提它们的兼容性:IE 9+
,哈哈……又是 IE
。
原生JS forEach()和map()遍历
共同点:
- 都可以用来便利数组的每一项
forEach()
和map()
都支持3个参数,即(item,index,Array)
,第一个是遍历的当前项,第二个是当前项的下标,第三个是原数组- 匿名函数中的
this
都是指windown
- 都是智能遍历数组
forEach()
- 没有返回值
- forEach方法中的this是ary,匿名回调函数中的this默认是window;
- 数组中有几项,那么传递进去的匿名回调函数就需要执行几次
- 理论上这个方法是没有返回值的,仅仅是遍历数组中的每一项,不对原来数组进行修改;但是可以自己通过数组的索引来修改原来的数组
1 | var ary = [12,23,24,42,1]; |
map()
[].map(); 基本用法跟forEach方法类似:
- 回调函数中支持return返回值;return的是啥,相当于把数组中的这一项变为啥(并不影响原来的数组,只是相当于把原数组克隆一份,把克隆的这一份的数组中的对应项改变了)
1 | var ary = [1,2,3,4,5]; |
兼容
结下来安利一下浏览器兼容的问题:
- 不管是forEach还是map在IE6-8下都不兼容(不兼容的情况下在Array.prototype上没有这两个方法),那么需要我们自己封装一个都兼容的方法,代码如下:
1 | /** |
1 | /** |
jQuery $.each()和$.map()遍历
共同点:
- 即可遍历数组,又可遍历对象。
$.each()
- 没有返回值。
$.each()
里面的匿名函数支持2个参数:当前项的索引i,数组中的当前项v。如果遍历的是对象,k 是键,v 是值。
$.map()
有返回值,可以return 出来。$.map()
里面的匿名函数支持2个参数和$.each()
里的参数位置相反:数组中的当前项v,当前项的索引 i。如果遍历的是对象,k 是键,v 是值。