js中forEach和map的区别:forEach不会改变原数组,而map会改变数组?错了错了
1.提出思考?forEach不会改变原数组,而map会改变数组?
看到掘金上一篇文章觉得很有意思:大致是描述一般面试官问js中forEach和map的区别?都会回答forEach不会改变原数组,而map会改变,我也一直对百度来的答案当作参考答案。事实证明这个答案是错的
面试:问js的forEach和map的区别 - 掘金
2.forEach()没有返回值,如果使用return会返回undefined;map会返回新数组

3.数组中数据为基本数据类型时,forEach和map都不会改变原数组
// 1、数组为基本数据类型时,forEach和map都不会改变原数组;使用return 返回时,forEach返回undefined,map返回一个处理后的新数组let arr = [1, 2, 3, 4, 5];let arrforEach = arr.forEach((item) => {return item * 2;});console.log(arr);//[1, 2, 3, 4, 5]console.log(arrforEach);//undefinedlet arr1 = [1, 2, 3, 4, 5];let arrMap = arr1.map(item => {return item * 2;});console.log(arr1);// [1, 2, 3, 4, 5]console.log(arrMap);// [2, 4, 6, 8, 10]
4.数据为引用数据类型时,map和forEach都会改变原数组
在使用 forEach 和 map 方法时,对引用类型元素的修改会直接反映在原始数组中。这是因为引用类型的元素实际上存储的是引用(内存地址),而非值本身。因此,通过引用可以访问和修改原始数组中的元素。而number,string,Boolean,null,undefined它们在栈内存中直接存储变量与值
// 2、数组为引用数据类型时,forEach和map都会改变原数组上的对象;使用return时,forEach返回undefined,map返回处理后的数据,未返回的元素返回undefined// 这是因为在使用 forEach 和 map 方法时,对引用类型元素的修改会直接反映在原始数组中。这是因为引用类型的元素实际上存储的是引用(内存地址),而非值本身。因此,通过引用可以访问和修改原始数组中的元素。// 而number,string,Boolean,null,undefined它们在栈内存中直接存储变量与值let arrObj1 = [{username: 'lmf',age: 20},{username: 'yl',age: 30}];let arrObj1ForEach = arrObj1.forEach(item => {if (item.username === 'lmf') return item.age = 100;});console.log(arrObj1);//{username: 'lmf', age: 100} , {username: 'yl', age: 30}console.log(arrObj1ForEach);//undefinedlet arrObj2 = [{username: 'lmf',age: 50},{username: 'yl',age: 60}];let arrObj2Map = arrObj2.map(item => {if (item.username === 'lmf') return item.age = 200;});console.log(arrObj2);//{username: 'lmf', age: 200} , {username: 'yl', age: 60}console.log(arrObj2Map);// [200, undefined]
5.map和forEach循环体内return时影响
return本身就是表示跳出本次循环,进入下次循环。博主说的观点“foreach可以跳出本次循环,return 语句可以在当前回调函数中返回,而map不能,只能遍历完整个数组。”这句话有歧义。
如下例:
其实无论是forEach还是map在return以后本次循环体中,return后的语句都不会执行。sum1和sum2都打印12,区别还是在于return后,map返回新数组的值由return的值决定,而forEach永远只会返回undefined。
- 如果有return且直接return会返回undefined,如果返回其他值会返回其值;
- 而forEach返回值永远会返回undefined
// 3、(错误)foreach可以跳出本次循环,return 语句可以在当前回调函数中返回,而map不能,只能遍历完整个数组。// return其实就是跳出本次循环,进行下次循环,区别其实和前面一样的,都是对最后返回的新数组产生影响,如果都定义sum在循环里操作,返回值都会相等const array1 = [1, 2, 3, 4, 5];let sum1 = 0;array1.forEach((element) => {if (element === 3) {return;//这句后面的代码此次循环都不会执行,所以对sum1不会有影响,如果返回'23',那么返回的新数组此元素也会返回'23'}console.log(element); //1,2,4,5sum1 += element;});console.log(newArray1);//undefinedconsole.log(sum1); // 输出: 12console.log("2222222");const array2 = [1, 2, 3, 4, 5];let sum2 = 0;const newArray = array2.map((element) => {if (element === 3) {return;这句后面的代码此次循环都不会执行,所以对sum2不会有影响}console.log(element);// 1,2,4,5sum2 += element;return element * 2;});console.log(sum2);// 12console.log(newArray); // 输出: [2, 4, undefined, 8, 10]
6.map 方法支持链式调用;forEach不支持因为返回的是undefined
const array3 = [1, 2, 3, 4, 5];const doubledSum = array3.map((element) => element * 2).reduce((accumulator, currentValue) => accumulator + currentValue, 0);console.log(doubledSum); // 输出: 30
7.总结
forEach区别:
- forEach无返回值,具体得说是return会返回undefined;map会返回新数组
- 数组类型为基本数据类型时,forEach()和map()都不会改变原数组;
- 数组类型为引用数据类型时,forEach()和map()都会改变原数组;
- 循环体中使用return时,return后的代码都不会执行,只会对循环后的返回值有影响,forEach永远返回undefined,map()会返回return的值;
- forEach()不支持链式操作;map()支持链式操作;
相关文章:
js中forEach和map的区别:forEach不会改变原数组,而map会改变数组?错了错了
1.提出思考?forEach不会改变原数组,而map会改变数组? 看到掘金上一篇文章觉得很有意思:大致是描述一般面试官问js中forEach和map的区别?都会回答forEach不会改变原数组,而map会改变,我也一直对…...
深度对话:从底层看Sui设计理念及网络规模扩展
近日,我们采访了George Danezis以了解Sui的交易处理系统如何促成高性能网络。他是Mysten Labs的联合创始人和首席科学家(Sui的最初贡献者),也是伦敦大学学院(University College London,UCL)安全…...
2.单链表练习
1. 链表的基本概念 链表(Linked List)是一种常见的数据结构,用于存储一系列元素,这些元素可以是任意类型的数据。链表中的每个元素被称为节点(Node),每个节点包含两部分:一个存储数…...
Wordpress 安装插件和主题报错
安装主题和插件的时候,就是这个恶心的报错, Wordpress plugin install: Could not create directory 这是权限惹的祸,如下一顿操作猛如虎,就解决了。 sudo chown -R www:www wp-content/themes sudo chown -R www:www wp-conte…...
Spring Cloud 2022.x版本使用gateway和nacos实现动态路由和负载均衡
文章目录 1、nacos下载安装1.1、启动服务器1.2、关闭服务器1.3、服务注册&发现和配置管理接口 2、代码示例2.1、app1工程代码2.2、app2工程代码2.3、gateway网关工程代码 3、动态配置网关路由3.1、配置动态路由3.2、配置为负载模式 4、gateway配置规则4.1、请求转发&#x…...
CSS中如何隐藏元素但保留其占位空间(display:none vs visibility:hidden)?
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ display: none;⭐ visibility: hidden;⭐ 如何选择⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为…...
无涯教程-机器学习 - 数据可视化
在上一章中,无涯教程讨论了数据对于机器学习算法的重要性,以了解具有统计信息的数据,还有另一种称为可视化的方式来理解数据。 借助数据可视化,可以看到数据的属性保持什么样的关联,这是查看要素是否与输出相对应的最…...
springboot设置日志输出级别
一、日志等级 trace:最低等级 debug:调试用,通常用于跟踪程序进展 info: 记录用,通常用于记录程序行为 warn:警告 error:错误 fatal:灾难性错误,最高等级 配置application.yml 实现…...
buildAdmin的使用笔记
安装buildAdmin 下载完整包,解压进入 buildadmin 的文件夹, 输入命令 composer install 启动的时候使用, php think run 就可以了 为什么启动只需要, php think run 这种启动方式, 我是头一回看见 ,后来才…...
RealVNC配置自定义分辨率(AlmaLinux 8)
RealVNC 配置自定义分辨率(AlmaLinux8) 参考RealVNC官网 how to set up resolution https://help.realvnc.com/hc/en-us/articles/360016058212-How-do-I-adjust-the-screen-resolution-of-a-virtual-desktop-under-Linux-#standard-dummy-driver-0-2 …...
LA@特征值和特征向量的性质
文章目录 方阵特征值和特征向量的性质👺特征值之和特征值之积推论:特征值判定方阵的可逆性 证明小结 导出性质可逆矩阵的特征值性质转置矩阵和特征值矩阵多项式的特征值不同特征值的特征向量线性无关定理推论推广 特征向量线性组合特征值的重数性质 方阵特征值和特征…...
Springboot使用kafka事务-生产者方
前言 在上一篇文章中,我们使用了springboot的AOP功能实现了kafka的分布式事务,但是那样实现的kafka事务是不完美的,因为请求进来之后分配的是不同线程,但不同线程使用的kafka事务却是同一个,这样会造成多请求情况下的…...
您的计算机已被.halo勒索病毒感染?恢复您的数据的方法在这里!
导言: 在当今数字时代,网络安全已经成为了我们生活和工作中不可或缺的一部分。然而, .Halo 勒索病毒的出现,使网络威胁变得更加真切和具体。本文91数据恢复将深入介绍 .Halo 勒索病毒的危害,详细探讨如何高效地恢复被其…...
生成式AI颠覆传统数据库的十种方式
对于生成式AI的所有闪光点,这个新时代最大的转变可能深埋在软件堆栈中。AI算法正在不易觉察地改变一个又一个数据库。他们正在用复杂、自适应且看似更直观的AI新功能颠覆传统数据库。 与此同时,数据库制造商正在改变我们存储信息的方式,以便…...
el-date-picker自定义只能选中当前月份和半年内月份等
需求:el-date-picker只能选中当前月期和当前月期往前半年,其他时间就禁用了不让选择了,因为没数据哈哈。当然也可以选择往前一年等。 一、效果 二、写个日期选择器 :picker-options:日期选项 value-format:选择后的格…...
Pyecharts教程(十一):使用Pyecharts绘制带有滑动数据缩放功能的K线图
Pyecharts教程(十一):使用Pyecharts绘制带有滑动数据缩放功能的K线图 作者:安静到无声 个人主页 目录 Pyecharts教程(十一):使用Pyecharts绘制带有滑动数据缩放功能的K线图前言步骤总结推荐专栏前言 K线图是金融市场分析中常见的图表类型之一,它能够直观地展示价格的变化…...
2023年高教社杯数学建模思路 - 案例:ID3-决策树分类算法
文章目录 0 赛题思路1 算法介绍2 FP树表示法3 构建FP树4 实现代码 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 算法介绍 FP-Tree算法全称是FrequentPattern Tree算法,就是频繁模…...
POJ 3273 Monthly Expense 二分
我们对每个月花费的最小花费进行二分,对于每一次二分的值mid,计算能花的月份数量,如果月份数量小于等于m,我们就不断的缩小mid,直到找到月份数量小于等于m 与 月份数量大于m的临界值,取最后一次满足条件的m…...
图论(基础)
知识: 顶点,边 | 权,度数 1.图的种类: 有向图 | 无向图 有环 | 无环 联通性 基础1:图的存储(主要是邻接矩阵和邻接表) 例一:B3643 图的存储 - 洛谷 | 计算机科学教育新生态 (…...
docker的运行原理
Docker 是一个开源的容器化技术,它能够让开发者将应用及其依赖打包到一个轻量级的、可移植的容器中,这个容器可以在几乎任何机器上一致地运行。要了解 Docker 的运行原理,我们首先要理解以下几个核心概念: 容器 (Container): 容器是一个轻量级的、独立的、可执行的软件包,…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...
