【JavaScript-基础】map、forEach、for、for in、for of等的区别

news/2025/10/21 7:10:03/文章来源:https://www.cnblogs.com/Dsir/p/19154028

tips:循环虽好,大家都得按自己所需场景进行使用。个人建议,不喜勿喷

forEach

forEach: forEach(item,index,array), item:当前处理的数据,index:下标,
array:整个数组
遍历全部数据,不能通过return结束循环,消耗性能
用于不转换数据的全部遍历。
tips: 除了抛出异常以外,没有办法中止或跳出 forEach() 循环。如果你需要中止或跳出循环,forEach() 方法不是应当使用的工具。

 // forEach 跳出循环const inventory = [{ name: "apples", quantity: 2 },{ name: "bananas", quantity: 0 },{ name: "cherries", quantity: 5 },];function  fn(arr){console.log('回调函数',arr)}function getItem(arr,name,fn){let item = nulltry {arr.forEach((element,i,arr) => {console.log(element,i,arr)if(element.name === name){item = element;fn(arr)throw Error();}});} catch (error) {}return item;}// forEach 和 map 的原生实现,都可挂载Array的原型上去实现你想要的方法
Array.prototype.myForEach = function (fn) {for(let i = 0; i < this.length; i++){fn(this[i], i, this);}
};
arr.myForEach(function (currentValue, currentIndex, currentArray) {console.log(currentValue, currentIndex, currentArray);
});
// map 和这个类似

Map

map(item,index,array), item:当前处理的数据,index:下标,
array:整个数组
一定遍历全部数据,不能通过return结束,消耗性能,不要常用。
常用于转换数据结构,比forEach快。和forEach都不影响原有的数组结构。

 const inventory = [{ name: "apples", quantity: 2 },{ name: "bananas", quantity: 0 },{ name: "cherries", quantity: 5 },];const newarr = inventory.map(({ name, quantity }) => ({[name]: quantity,}));

for...of

一般的对象是不能使用for...of 进行遍历。具有 iterator 接口就可以用for...of循环遍历它的成员(属性值value)for...of循环可以使用的范围包括数组、Set 和 Map 结构、某些类似数组的对象、Generator 对象,以及字符串。for...of循环调用遍历器接口,数组的遍历器接口只返回具有数字索引的属性。对于普通的对象,for...of结构不能直接使用,会报错,必须部署了 Iterator 接口后才能使用。可以中断循环。****

一个对象如果要具备可被 for...of 循环调用的 Iterator 接口,就必须在其 Symbol.iterator 的属性上部署遍历器生成方法(或者原型链上的对象具有该方法)

tips: 遍历器对象根本特征就是具有next方法。每次调用next方法,都会返回一个代表当前成员的信息对象,具有value和done两个属性。

实例代码如下:
普通对象是不具备遍历器接口,例如:

 let obj = {name:'jack',age:20,job:'web engineer'
}for(const item of obj){console.log(item) //Uncaught TypeError: obj is not iterable
}

给普通对象增加Iterator 才能进行遍历:
想了解为啥要这么使用点击该链接

let obj = {name:'jack',age:20,job:'web engineer',[Symbol.iterator](){const self = this;const keys = Object.keys(self);let index = 0;return{next(){if(index < keys.length){return {value:self[keys[index++]],done:false}}else{return {value:undefined,done:true}}}}}}for(const item of obj){console.log(item) //name:'jack',//age:20,//job:'web engineer'}

注意:
原生具备 Iterator 接口的数据结构有:

  • Array
  • Map
  • Set
  • String
  • TypedArray
  • 函数的 arguments 对象
  • NodeList 对象
  • ES6 的数组、Set、Map 都部署了以下三个方法: entries() / keys() / values(),调用后都返回遍历器对象。

for...in

不但可以遍历数组,还可以遍历对象,数组遍历下标,对象遍历属性。
大多场景用来遍历对象。遍历对象自身的和继承的可枚举的属性,也就是说会包括那些原型链上的属性。如果想要仅迭代自身的属性,那么在使用 for...in 的同时还需要配合 getOwnPropertyNames() 或 hasOwnProperty()。可以中断循环。

let obj = {name:'jack',age:20,job:'web engineer',
}
for(const key in obj){console.log(key); // name,age,jobconsole.log(obj[key]) // jack,20,web engineer
}let arr1 = ['name','age','job']
for(const key in arr1){console.log(key); // 1,2,3console.log(arr1[key]) // name,age,job
}

xdm,再不睡觉头发丝又得掉几根...

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

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

相关文章

dotnet 利用 Windows 注册表实现开机自动启动

本文记录一个开机自动启动实现方法,通过写入到注册表实现开机之后,用户登录完成之后让应用程序开机自启本文将演示写入 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run 注册表路线,实现应用程序…

帮我回答这些问题

◦ 以太坊交易的数据结构及EIP1559/712协议的理解。 ◦ 以太坊的账⼾是如何⽣产的,公私钥的关系。 ◦ 以太坊区块链浏览器⼀般会展⽰哪些信息,⼤概能知道。 ◦ 以太坊交易nonce的作⽤,nonce异常交易如何处理。 ◦ 以…

使用uWSGI和Nginx部署深度学习模型指南

本文详细介绍了如何通过uWSGI应用服务器和Nginx反向代理将深度学习模型部署为可扩展的Web服务,涵盖WSGI协议原理、服务器配置步骤及性能优化要点,帮助构建高并发生产级AI应用。如何使用uWSGI和Nginx部署深度学习模型…

Python 类属性的应用场景

Python 类属性的应用场景 在面向对象编程中,类属性作为一种特殊的属性形式,始终扮演着“共享者”与“管理者”的角色。与实例属性为每个对象单独存储数据不同,类属性属于类本身,被所有实例共同拥有和访问。这种特性…

快速提升Entra ID安全性的实用指南

本文详细介绍了如何通过配置用户默认设置、保护特权角色、管理条件访问策略等关键步骤,快速提升Microsoft Entra ID的安全性,帮助企业构建更强大的云身份防护体系。快速提升Entra ID安全性 在2025年10月的BSides北弗…

为什么很多人分不清关联和聚合?

为什么很多人分不清关联和聚合 这个问题确实很常见,很多人(包括有经验的开发者)都会混淆关联和聚合。让我从多个角度分析这个现象的原因。 主要混淆原因 1. 代码实现的高度相似性 # 关联关系的代码 class Universit…

机器学习商业应用实战指南

本文详细介绍了在企业中应用机器学习的完整流程,从问题识别到团队建设、基础设施搭建、数据策略制定,再到MVP开发和持续迭代,为企业实施AI转型提供了系统性的技术指导。将机器学习应用于您的业务 在这篇文章中,我将…

在线签名工具,手写签名保存为png图片,用于生成电子签名用于word文档等

原文链接:https://blog.nanzhi.vip/?article_id=30&type=software 应用案例: 每天进步一点点

什么情况下,有必要将属性设为类属性而非实例属性?

类属性(Class Attribute)是定义在类中、不属于任何实例的属性,它被该类的所有实例共享。将属性设为类属性而非实例属性的必要性,主要体现在数据共享、全局状态维护、节省内存等场景中。以下从核心作用和具体示例两…

在线签名工具,保存为png图片,用于生成电子签名用于word文档等

原文链接:https://blog.nanzhi.vip/?article_id=30&type=software 应用案例: 每天进步一点点

玄机——第五章 Windows 实战-evtx 文件分析

第五章 Windows 实战-evtx 文件分析 切勿在本地运行 1.将黑客成功登录系统所使用的IP地址作为Flag值提交; 拿到文件后传入虚拟机打开 第一个是安全日志,在日志中过滤编号为4625(登录失败),4624(登录成功)的事件 从下…

251021

251021一觉醒来,我又活在了那份恐慌里,脚下飘飘,身体却很沉,这是清醒的代价,天堂和地狱都在人间

CityRefer:城市规模点云数据上的地理感知 3D 视觉接地数据集 - MKT

CityRefer:城市规模点云数据上的地理感知 3D 视觉接地数据集 城市规模的 3D 点云是表达精细复杂户外结构的一种有效方式。它涵盖了城市各个组成部分(包括汽车、街道和建筑物)的外观和几何特征,可用于实现自动驾驶汽…

SensatUrban语义分割数据集SensatUrban - MKT

SensatUrban语义分割数据集SensatUrban https://github.com/QingyongHu/SensatUrban 地面:包括不透水表面、草地、地形 植被:包括乔木、灌木、树篱、灌木丛 建筑:包括商业/住宅建筑 墙体:包括栅栏、高速公路护栏…

推荐算法参考资料

协同过滤 https://cloud.tencent.com/developer/article/1085760 Wide & Deep https://blog.csdn.net/qq_42363032/article/details/115935964 DIN https://blog.csdn.net/u012328159/article/details/123043033 指…

LLM学习笔记DAY8

📘今日学习总结 大语言模型提示技术学习笔记 1 提示工程 1.1 提示设计关键要素 五大核心要素:任务描述:清晰明确的任务指令,包含目标、限制条件、数据格式等 上下文信息:提供背景知识,帮助模型突破知识局限 输入…

软件工程第二次团队作业——构建一个智能体

这个作业属于哪个课程 软件工程这个作业要求在哪里 作业要求这个作业的目标 构建一个AI智能体,不仅能通过自然语言交流(会说),更能理解指令意图,并自动调用工具、访问数据或执行代码来完成任务(会做),最终在一…

VoxelNeXt 用于 3D 对象检测和跟踪的完全稀疏 VoxelNet(CVPR 2023) - MKT

VoxelNeXt 用于 3D 对象检测和跟踪的完全稀疏 VoxelNet(CVPR 2023) https://github.com/dvlab-research/VoxelNeXt

CityNav:包含地理信息的语言目标空中导航数据集 - MKT

CityNav:包含地理信息的语言目标空中导航数据集https://water-cookie.github.io/city-nav-proj/

Grounded-SAM 使用文本提示检测和分割所有内容 - MKT

Grounded-SAM 使用文本提示检测和分割所有内容https://github.com/IDEA-Research/Grounded-Segment-Anything?tab=readme-ov-file#install-without-docker