一、前言

  forEach()和map()两个方法都是ECMA5中Array引进的新方法,主要作用是对数组的每个元素执行一次提供的函数,但是它们之间还是有区别的。jQuery也有一个方法$.each(),长得和forEach()有点像,功能也类似。但是从本质上还是有很大的区别的,那么我们探探究竟。

二、forEach和map语法

2.1、语法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//forEach
array.forEach(callback(currentValue, index, array){
    //do something
}, this)
//或者
array.forEach(callback(currentValue, index, array){
    //do something
})  
//map:
var new_array = arr.map(callback[, thisArg]) 
//$.each()
$(selector).each(function(index,element))  //注意参数的顺序

callback: 为数组中每个元素执行的函数,该函数接收三个参数,

参数一:当前数组中元素;参数二:索引; 参数三:当前数组。

this:可选,执行会掉时候,this的指向。

2.2、区别

  2.2.1、forEach()返回值是undefined,不可以链式调用。

  2.2.2、map()返回一个新数组,原数组不会改变。

  2.2.3、没有办法终止或者跳出forEach()循环,除非抛出异常,所以想执行一个数组是否满足什么条件,返回布尔值,可以用一般的for循环实现,或者用Array.every()或者Array.some();

  2.2.4、$.each()方法规定为每个匹配元素规定运行的函数,可以返回 false 可用于及早停止循环。

三、一些栗子

3.1 在使用forEach()时候,如果数组在迭代的视乎被修改则其他元素会被跳过。因为 forEach()不会在迭代之前创建数组的副本。

3.2反转字符串

1
2
3
4
var str = '12345';
Array.prototype.map.call(str, function(x) {   //同时利用了call()方法
  return x;
}).reverse().join('');

3.3一个笔试题。

1
["1""2""3"].map(parseInt);  //结果  [1, NaN, NaN]   

如果想得到[1, 2,3]应该这么做

1
2
3
4
5
function returnInt(element){
  return parseInt(element,10);
}
["1""2""3"].map(returnInt);  

这主要是因为 parseInt()默认有两个参数,第二个参数是进制数。当parsrInt没有传入参数的时候,而map()中的回调函数时候,会给它传三个参数,第二个参数就是索引,明显不正确,所以返回NaN了。

3.4....

四、兼容性

forEach()和map()是ECMA5新引入的,可能在标准的其他实现中不存在,在使用前可以要Ployfill一下。

具体网上很多吧,更多的是在ie9以下,如果你的项目无视这些,那么你可以不care。

转载于:https://www.cnblogs.com/xiaozhumaopao/p/9700901.html

JS的forEach和map方法的区别相关推荐

  1. mapPartition方法与map方法的区别(转载)

    根据[1] 算子 作用 map 应用于RDD中每个元素 mapPartitions 应用于每个分区 根据[2]mapPartitions更容易OOM 代码如下: //生成10个元素3个分区的rdd a ...

  2. 原生JS forEach()和map()遍历的区别以及兼容写法

    一.原生JS forEach()和map()遍历 共同点: 1.都是循环遍历数组中的每一项. 2.forEach() 和 map() 里面每一次执行匿名函数都支持3个参数:数组中的当前项item,当前 ...

  3. JavaScript中的数组遍历forEach()与map()方法以及兼容写法

    原理: 高级浏览器支持forEach方法 语法:forEach和map都支持2个参数:一个是回调函数(item,index,list)和上下文: forEach:用来遍历数组中的每一项:这个方法执行是 ...

  4. map语法获取index_JavaScript中的数组遍历forEach()与map()方法以及兼容写法

    原理: 高级浏览器支持forEach方法 语法:forEach和map都支持2个参数:一个是回调函数(item,index,list)和上下文: forEach:用来遍历数组中的每一项:这个方法执行是 ...

  5. js中setTimeout的用法和JS计时器setTimeout与setInterval方法的区别和confirm方法

    setTimeout()在js类中的使用方法 setTimeout (表达式,延时时间) setTimeout(表达式,交互时间) 延时时间/交互时间是以豪秒为单位的(1000ms=1s) setTi ...

  6. Spark mapPartition方法与map方法的区别

    rdd的mapPartitions是map的一个变种,它们都可进行分区的并行处理. 两者的主要区别是调用的粒度不一样:map的输入变换函数是应用于RDD中每个元素,而mapPartitions的输入函 ...

  7. JS数组遍历-forEach()、map()方法

    [{a:'1',b:'11'},{a:'2',b:'21'},{a:'3',b:'31'}].forEach((item, index, array) => {let c = '';let d ...

  8. 前端js 面试题 forEach 和 map 有什么区别?

    1) 遍历数组-- 更改 item和index 不会更改原数组 更改本身(arr)会使原数组更改. 没有返回值 undefined var arr = [1,2,3,4,5] var result = ...

  9. TypeScript里数组foreach和map操作的区别

    如果map操作里的返回值没有被使用,那么map可以被forEach替换.

最新文章

  1. PCL工程的CMakeList.txt文件书写规范
  2. linux内核参数优化
  3. 使用jsp实现word、excel格式报表打印-JSP教程,Jsp/Servlet
  4. Docker生成镜像的两种方式
  5. 设计模式之_Iterator_06
  6. mysql8允许外网访问(转载+整理)
  7. 以Blog.Core的方式来打开Abp.vNext
  8. 接口中默认方法和静态方法_接口中的默认方法和静态方法
  9. hystrix应用 博客_用Hystrix保护您的应用程序
  10. hive2 java连接_用Java代码通过JDBC连接Hiveserver2
  11. Java菜鸟的初次实习经历
  12. 百度网盘永久分享链接-注册电气工程师(注电)历年考试真题PDF, Word版资料(含答案), 相关视频资料
  13. 菜鸟的草缸 篇三:闯缸敢死队、莫斯墙制作
  14. 某单机斗地主内购破解
  15. STM8入门以及程序编译、烧录、IAR使用方法(扫盲篇)
  16. Python可视化--条形图
  17. 重看joel on software
  18. uni-app 中英文切换
  19. 20本必读的用户体验书目
  20. java中的日志处理

热门文章

  1. OPPO大数据平台运营研发实践分享
  2. java循环do while_Java中for、while、do while三种循环语句的区别介绍
  3. python文件转换成jar包_Python一键转Jar包,Java调用Python新姿势!
  4. 如何远程进入linux7.2图形界面,CentOS7.2安装VNC,让Windows远程连接CentOS 7.2 图形化界面...
  5. php取表中最大的id,php中的增删查改
  6. HTML窗口与对话框
  7. Eclipse环境下 spring MVC 入门实例
  8. Spring Boot Mybatis入门示例
  9. python动态心形代码_父亲节,程序员几条代码硬核示爱
  10. Java学习之向上、下转型