map、foreach 和 for ,多角度对比

news2024/11/18 21:52:27

for

1.访问元素和操作方式------通过索引访问数组元素,并可以执行任意操作。

const numbers = [1, 2, 3, 4, 5];

// for循环示例
for (let i = 0; i < numbers.length; i++) {
    console.log("Number (for loop): " + numbers[i]);
}

2.索引控制--------通过手动控制索引来迭代数组元素。

const fruits = ["apple", "banana", "orange"];

// for循环示例
for (let i = 0; i < fruits.length; i++) {
    console.log("Fruit (for loop): " + fruits[i]);
}

3.原数组是否改变   -------可以通过操作原数组来改变其内容

// for循环示例,改变原数组
for (let i = 0; i < numbers.length; i++) {
    numbers[i] = numbers[i] * 2;
}
console.log("Numbers (for loop): ", numbers);

 for循环适用于需要直接访问索引或进行复杂迭代逻辑的场景。

foreach

1.访问元素方式------直接访问数组元素,并执行指定的回调函数对每个元素进行操作。

const numbers = [1, 2, 3, 4, 5];

// forEach循环示例
numbers.forEach(number => {
    console.log("Number (forEach loop): " + number);
});

2.索引控制--------由系统自动迭代数组元素,无需手动控制索引。

const fruits = ["apple", "banana", "orange"];


// forEach循环示例
fruits.forEach(fruit => {
    console.log("Fruit (forEach loop): " + fruit);
});

3.原数组是否改变 -------可以通过操作原数组来改变其内容

// forEach循环示例,改变原数组
numbers.forEach((number, index) => {
    numbers[index] = number * 2;
});
console.log("Numbers (forEach loop): ", numbers);

forEach循环提供了更简洁和易读的语法,适用于简单的遍历场景,无需手动控制索引。 

map

1.访问元素和操作方式------通过回调函数访问和操作数组元素,生成一个新的数组

// map函数示例
const squaredNumbers = numbers.map(number => number * number);
console.log("Squared Numbers (map): ", squaredNumbers);

2.原数组是否改变  -------不修改原数组,而是返回一个新的数组,保持原始数组的不变性。

// map函数示例,不改变原数组
const doubledNumbers = numbers.map(number => number * 2);
console.log("Doubled Numbers (map): ", doubledNumbers);
console.log("Numbers (original): ", numbers);

对比

本质差异

  • for循环:是一种传统的迭代循环,提供了更多灵活性和控制能力,可以应对复杂的迭代逻辑。
  • forEach循环:是一种更高级的抽象,专注于对数组的每个元素进行操作,强调代码的简洁性和可读性。
  • map函数:是一种函数式编程的范式,通过传入回调函数对数组的每个元素进行操作,返回一个新的数组。

性能差异

  • for循环:由于直接操作索引,循环的性能相对较高。在大规模数据的情况下,for循环通常是最高效的循环方式。
  • forEach循环:在每次迭代时,需要执行回调函数,这会增加一定的性能开销。尤其在大规模数据的情况下,forEach循环的性能可能稍逊于for循环。
  • map函数:由于使用了回调函数,在性能方面会略微低于for循环,但通常与forEach循环的性能相当。

语法差异

  • for循环:通过指定循环的起始条件、终止条件和迭代方式来控制循环。语法相对较复杂,需要显式地操作索引或计数器。
  • forEach循环:提供了一种简洁的语法,使用回调函数来对数组的每个元素进行操作,无需显式地操作索引。
  • map函数:使用高阶函数的形式,通过传入回调函数对数组的每个元素进行操作,返回一个新的数组。
const numbers = [];
for (let i = 0; i < 1000000; i++) {
    numbers.push(i);
}

console.time("for loop");
for (let i = 0; i < numbers.length; i++) {
    // 执行一些操作
}
console.timeEnd("for loop");

console.time("forEach loop");
numbers.forEach(num => {
    // 执行一些操作
});
console.timeEnd("forEach loop");

console.time("map");
numbers.map(num => {
    // 执行一些操作
});
console.timeEnd("map");

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/736793.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

非线性系统的混沌特性分析方法--相图/分岔图分析法

非线性系统的混沌特性分析方法–相图/分岔图分析法 ​ 混沌映射被用于生成混沌序列&#xff0c;这是一种由简单的确定性系统产生的随机性序列。一般混沌序列具有以下主要特征&#xff1a; 非线性&#xff1b;对初值的敏感依赖性&#xff1b;遍历性&#xff1b;随机性&#xf…

【Linux初阶】基础IO - 磁盘 文件系统

&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1f31f; &#x1f36d;&#x1f36d;系列专栏&#xff1a;【Linux初阶】 ✒️✒️本篇内容&#xff1a;认识磁盘&#xff08;物理结构、储存结构、逻辑结构、读取单位&#xff09;&#xff0c;理解文件系统&#xf…

会声会影2023最新免费版零基础上手视频剪辑工具

比如会声会影视频编辑软件&#xff0c;既加入光影、动态特效的滤镜效果&#xff0c;也提供了与色彩调整相关的LUT配置文件滤镜&#xff0c;可选择性大&#xff0c;运用起来更显灵活。会声会影在用户的陪伴下走过20余载&#xff0c;经过上百个版本的优化迭代&#xff0c;已将操作…

【消息队列RabbitMQ】一、RabbitMQ认识

这里写目录标题 RabbitMQSpringboot整合RabbitMQRabbitMQ的常见开发模式如何保证消息的可靠生产和可靠投递什么是死值队列和延迟队列 RabbitMQ 消息队列有&#xff1a; 1、ActiveMQ 2、RabbitMQ 3、ZeroMQ 4、Kafka 什么是RabbitMQ&#xff1f; RabbitMQ是一个开源的消息队列服…

第23章:范式

一、范式 1.什么是范式 关于数据表设计的基本原则&#xff0c;规则就是范式NF。 2.范式都包括哪些&#xff1f; 第一范式&#xff08;1NF&#xff09;、第二范式&#xff08;2NF&#xff09;、第三范式&#xff08;3NF&#xff09;、巴斯-科德范式&#xff08;BCNF - Boyce…

两台电脑如何共享文件?6步快速完成!

电脑之间共享文件已经成为日常工作中不可或缺的一部分。无论是在家庭环境中与家人共享照片和视频&#xff0c;还是在办公室中与同事共享文档和数据&#xff0c;了解两台电脑如何共享文件是非常重要的。 但在实际操作中&#xff0c;如何更好的使两台电脑共享文件&#xff0c;也…

多层感知机(MLP)算法原理和代码实现

文章目录 多层感知机入门算法优化原理sklearn代码实现核心优缺点分析 多层感知机入门 神经网络在最近几年&#xff0c;是个很火的名词了。常听到的卷积神经网络(CNN)或者循环神经网络(RNN&#xff09;&#xff0c;都可以看做是神经网络在特定场景下的具体应用方式。 本文我们…

干货 | 智能网联汽车大数据基础平台构建研究

以下内容整理自大数据能力提升项目必修课《大数据系统基础》同学们的期末答辩汇报。 各位老师大家上午好&#xff0c;我们组的题目是智能网联汽车大数据基础平台的构建。我们的指导企业是西部智联。我们的汇报将从这五个方面进行展开&#xff0c;第一个方面是项目背景与需求分析…

uni-app基础知识

发展 DCloud于2012年开始研发小程序技术&#xff0c;优化webview的功能和性能&#xff0c;并加入W3C和HTML5中国产业联盟。 2015年&#xff0c;DCloud正式商用了自己的小程序&#xff0c;产品名为“流应用”&#xff0c;它不是B/S模式的轻应用&#xff0c;而是能接近原生功能…

Debezium系列之:基于debezium将mysql数据库数据更改流式传输到 Elasticsearch和PostgreSQL数据库

Debezium系列之&#xff1a;基于debezium将mysql数据库数据更改流式传输到 Elasticsearch和PostgreSQL数据库 一、背景二、技术路线三、配置四、从mysql同步数据到Elasticsearch和PostgreSQL数据库五、总结 一、背景 基于 Debezium 的端到端数据流用例&#xff0c;将数据流式传…

I/O 多路复用小结

Socket 模型 Socket 编程是一种使用 Socket 模型进行网络通信的编程技术。它是一种基于网络套接字的编程模型&#xff0c;用于实现不同计算机之间的数据传输。 事实上&#xff0c;在进行网络通信前&#xff0c;通信双方都要创建一个 Socket&#xff0c;双方的数据读写都要依赖于…

【Python】执行SQL报错

可以再数据库查询界面执行的SQL&#xff0c;一直报错 unsupported format character Y (0x59) at index 61 SQL如下&#xff1a; datapd.read_sql_query(sql"""selectdate_format(create_time,%Y-%m) as mon,count(distinct order_id) as ord_cntfrom prod.o…

HTTP与HTTPS

HTTP与HTTPS介绍 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息&#xff0c;HTTP协议以明文方式发送内容&#xff0c;不提供任何方式的数据加密&#xff0c;如果攻击者截取了Web浏览器和网站服务器之间的传输报文&#xff0c;就可以直接读懂其中的信息&…

qt源码--事件系统

qt的事件传播主要依赖于QCoreApplication、QAbstractEventDispatcher&#xff08;会根据不同的平台生成各自的处理对象&#xff09;、QEvent&#xff08;各种事件类型&#xff09;等。 首先看下QCoreApplication的实现&#xff1a; 2、了解QCoreApplication的构造函数 其构造函…

在最新ICP备案域名的基础上,结合其他网络营销手段,打造强大的品牌推广效果

API接口是一种软件系统之间进行交互的方式&#xff0c;通过API接口&#xff0c;可以在不同的系统之间传递数据、命令等信息。在网络营销中&#xff0c;API接口可以帮助我们更加高效地进行品牌推广。本文将以在最新ICP备案域名的基础上&#xff0c;结合其他网络营销手段&#xf…

JVM回收算法(标记-清除算法, 复制算法, 标记-整理算法)

1.标记-清除算法 最基础的算法&#xff0c;分为两个阶段&#xff0c;“标记”和“清除” 原理&#xff1a; - 标记阶段&#xff1a;collector从mutator根对象开始进行遍历&#xff0c;对从mutator根对象可以访问到的对象都打上一个标识&#xff0c;一般是在对象的header中&am…

vue-router 4.0 动态路由会跳转到 404 页面的问题

引子 开发过前端单页面应用的小伙伴们&#xff0c;应该对前端路由都不陌生吧。 无论是用 vue 或者 react&#xff0c;都有官方提供的 router 方案。 但是有些场景下&#xff0c;处于安全性和友好性考虑&#xff0c;我们需要用到动态路由。 如果你不知道什么叫动态路由&…

翻遍整个牛客网,整理出了全网最全的Java面试八股文大合集,整整4000多页

大家从 Boss 直聘上或者其他招聘网站上都可以看到 Java 岗位众多&#xff0c;Java 岗位的招聘薪酬天差地别&#xff0c;人才要求也是五花八门。而很多 Java 工程师求职过程中&#xff0c;也是冷暖自知。很多时候技术有&#xff0c;但是面试的时候就是过不了&#xff01; 为了帮…

4.7 x64dbg 应用层的钩子扫描

所谓的应用层钩子&#xff08;Application-level hooks&#xff09;是一种编程技术&#xff0c;它允许应用程序通过在特定事件发生时执行特定代码来自定义或扩展其行为。这些事件可以是用户交互&#xff0c;系统事件&#xff0c;或者其他应用程序内部的事件。应用层钩子是在应用…

【Zabbix 监控 Windows 系统,Java应用,SNMP】

目录 一、Zabbix 监控 Windows 系统1、下载 Windows 客户端 Zabbix agent 22、安装客户端&#xff0c;配置3、在服务端 Web 页面添加主机&#xff0c;关联模板 二、Zabbix 监控 java 应用1、客户端开启 java jmxremote 远程监控功能1、配置 java jmxremote 远程监控功能2、启动…