map、foreach 和 for ,多角度对比

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.hqwc.cn/news/15615.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

直流运算放大电路-----Howland(二)

目录 豪兰德电路形式1 电路图 计算公式 仿真与分析 豪兰德电路形式2 电路图 计算公式 豪兰德电路形式3 电路图 计算公式 改进电路 豪兰德电路形式1 模拟电子技术基础&#xff08;第五版&#xff09;5.7 电路图 计算公式 仿真与分析 如图&#xff0c;红框内为负反馈&…

【数据结构与算法】图课后习题

题目 下面一共有七道有关图的课后习题&#xff0c;全部都是思路画图题并不是算法设计题故在此就一起列举出来了~ 1. 已知如下图所示的有向图&#xff0c;请回答下面几个问题 每个顶点的入/出度&#xff1b;邻接矩阵&#xff1b;邻接表&#xff1b;逆邻接表&#xff1b;强连通…

AcWing 1497:树的遍历

【题目来源】https://pintia.cn/problem-sets/994805342720868352/exam/problems/994805485033603072https://www.acwing.com/problem/content/description/1499/【题目描述】 一个二叉树&#xff0c;树中每个节点的权值互不相同。 现在给出它的后序遍历和中序遍历&#xff0c;…

Python爬虫与数据挖掘在外汇市场分析中的应用

外汇市场是全球最大的金融市场之一&#xff0c;每天的交易量可以达到几万亿美元。深入了解外汇市场的趋势和变化对于投资者来说至关重要&#xff0c;因为即使是微小的价格波动也可能导致巨额利润或损失。从过去的历史数据中抽取经验教训&#xff0c;并使用数据挖掘算法来预测未…

MOS管结构--NMOS、PMOS、CMOS、NAND、NOR、latch up(闩锁效应) 、Channel Length vs Gate Length

文章目录 NMOSPMOSCMOS (Complementary Metal Oxide Semiconductor)NAND&#xff08;与非门&#xff09;NAND layout NOR&#xff08;或非门&#xff09;latch up&#xff08;闩锁效应&#xff09;Channel Length vs Gate Length NMOS 如果硅区域中掺杂了具有五价电子&#xff…

Kotlin~Command模式

概念 把请求转化为独立的对象 角色介绍 Command: 命令接口ConcreteCommand: 具体命令实现类 UML 代码实现 interface Command {fun execute(vararg arg: String):Int } class Print : Command {override fun execute(vararg arg: String): Int {println("Print:${arg…

一些行业报告--From 艾瑞咨询

一些行业报告--From 艾瑞咨询 1 介绍2 机械臂行业研究 [From 艾瑞咨询 -- 中国工业机器人行业研究报告&#xff08;2023&#xff09;2.1 发展历程2.2 中国工业机器人相关政策2.3 产业链2.4 三大部分六大系统2.5 伺服&控制器 主要玩家 及 关键指标及难点2.6 减速机 主要玩家…

面向 “大模型” 的未来服务架构设计

文章目录 大模型热潮大模型落地服务设计 or 重构未来的服务架构微服务化分层化 大模型应用架构架构设计图架构 Demo 实现 小结附录 大模型热潮 今年的互联网赛道中 “顶流” 非大模型莫属。 科技部新一代人工智能发展研究中心 5 月底发布的《中国人工智能大模型地图研究报告》显…

Linux下使用curl命令发送GET和POST请求

目录&#xff1a; 1、发送get请求带请求头2、发送post请求带请求头带参数 1、发送get请求带请求头 curl -X GET "http://localhost:8080/onlinePreviewCallbackApiManagement/v1/3rd/file/info" -H "accept: */*" -H "X-Weboffice-File-Id: 123"…

图像增广:强化深度学习的视觉表现力

目录 摘要&#xff1a; 1. 图像增广简介 2. 图像增广的原理 3. 常见的图像增广技术 4. 如何在实际项目中应用图像增广 5.实际应用 摘要&#xff1a; 当今&#xff0c;深度学习已经在计算机视觉领域取得了令人瞩目的成就。图像增广作为一种数据处理技术&#xff0c;让我们…

FreeRTOS ~(七)互斥量 ~ (2/3)互斥量解决优先级反转问题

前情提要 FreeRTOS ~&#xff08;四&#xff09;同步互斥与通信 ~ &#xff08;2/3&#xff09;互斥的缺陷 FreeRTOS ~&#xff08;五&#xff09;队列的常规使用 ~ &#xff08;2/5&#xff09;队列解决互斥缺陷 FreeRTOS ~&#xff08;六&#xff09;信号量 ~ &#xff08;2/…

swiftUI和swift的区别

概述 SwiftUI是苹果公司推出的一种用于构建iOS、macOS、watchOS和tvOS应用程序界面的框架。它是基于Swift编程语言开发的&#xff0c;旨在简化UI开发过程并提供实时预览功能&#xff0c;使开发人员可以更快地构建出漂亮的应用程序界面。 Swift是苹果公司推出的一种面向对象的…