首页 > 其他分享 >分析.foreach和.map的区别

分析.foreach和.map的区别

时间:2023-01-02 22:55:05浏览次数:34  
标签:map 遍历 区别 forEach 数组 使用 foreach

在程序员编程的过程中经常会有遍历数组的需要,.foreach和.map都具有遍历的作用,那么他们的共同点和区别是什么呢?我们来分析一下.

一、共同点

1.都只能遍历数组。

2. 每次执行匿名函数都支持三个参数,参数分别为item(当前每一项)、index(索引值)、arr(原数组),forEach 和 map都相当于封装好的单层for循环,三个值都相同。

3. 匿名函数中的this都是指向window。

4.都是循环遍历数组中的每一项

 二、不同点

1. map()会分配内存空间存储新数组并返回,.forEach()不会返回数据。

例:

 

 输入m是"undefined"

换成.map的话

 

 输出结果是原数组

2. .forEach()改变原数组,map()返回新数组,原数组不变

例:

 

 原来的数组就变成了

 

 

 如是使用.map则数组不变.

原理解释:

forEach遍历通常都是直接引入当前遍历数组的内存地址,生成的数组的值发生变化,当前遍历的数组对应的值也会发生变化。

而map遍历后的数组通常都是生成一个新的数组,新的数组的值发生变化,当前遍历的数组值不会变化。

三、使用场景的不同

在分析了二者的相同与不同之处之后,我们就可以分析二者使用场景的不同。

由于forEach会改变数组,因此适用于不打算改变数据的时候,例如我们需要使用数组进行比较而不是进行改变的时候。

map()适用于你要改变数据值的时候。不仅仅在于它更快,而且返回一个新的数组。这样的优点在于你可以使用复合(composition)(map(), filter(), reduce()等组合使用)。

 

标签:map,遍历,区别,forEach,数组,使用,foreach
From: https://www.cnblogs.com/AllenPan/p/17020694.html

相关文章

  • abstract; final; 属性赋值的先后顺序; 静态变量与实例变量的区别; instanceof关键字的使
    abstract注意事项。abstract不能修饰:private,static,final这些方法。abstract抽象要重写----》用来子类继承实现方法的1、abstract不能用来修饰属性、构造器等构造器不能......
  • Java Map实现按value排序
    JavaMap实现按value排序如果想按照key来排序,用TreeMap就可以;如果想实现按value排序,可以采用下面这种方式publicstaticvoidmain(String[]args){Map<St......
  • IAT hook与inline hook的区别
    IAThook导入表hook原理:修改导入表中某函数的地址到自己的补丁函数。IATHook   通过GetProcAddress获取目标函数地址   在程序内存中找到所在dll的导入表   查......
  • SSDT Hook—— 本质上和inline hook没有区别,无非是在内核层面而已!注意Windows Vista X
    SSDTHookSSDTHook属于内核层Hook,也是最底层的Hook。由于用户层的API最后实质也是调用内核API(Kernel32->Ntdll->Ntoskrnl),所以该Hook方法最为强大。不过值得注意的是http......
  • HashMap-2023-1-2
    packageCollection;importjava.util.HashMap;importjava.util.Map;importjava.util.Scanner;importjava.util.Set;publicclassMapTest{publicMap<String,Stu......
  • SQL堆叠注入及waf绕过注入;SQL注入之SQLMAP绕过WAF
    堆叠查询注入Stackedinjections(堆叠注入)从名词的含义就可以看到应该是一堆sql语句(多条)一起执行。而在真实的运用中也是这样的,我们知道在mysql中,主要是命令......
  • 第十三章《集合》第5节:Map集合
    ​List、Set和Queue都是Collection接口的子接口,因此从更高层次来说它们属于统一类型的集合。Map接口也代表一种集合,但它不是Collection子接口,因此它属于另一种类型的集合。M......
  • QPixmap QImage
    QPixmap  QImage voidScrollBox::setThumbnail(QPixmapimg){QPixmapbkPixmap=img.fromImage(img.toImage().scaled(size(),Qt::IgnoreAspectRatio,Qt......
  • kotlin中var与val的区别
    Kotlin中有常见的两种变量定义:varvalval相当于java中定义常量时加了一个final,而var就是正常定义变量定义一个数值和string很好理解,在注意定义对象的时候,不要搞错了,val一......
  • c删除文件remove/unlink区别
    我们知道,Linux环境下经常使用rmdir来删除一个空文件夹,使用unlink函数删除文件链接。除此之外,C中的remove函数的功能也是删除文件,那么他们之间有什么区别?通过man来......