JS遍历数组的十种方法总结

​​​

目录

一、for 循环遍历

二、for ... of 方法

三、for...in循环

四、forEach 遍历

五、map 映射

六、filter方法

七、reduce高阶函数(迭代(累加器))

八、every

九、some

十、find


一、for 循环遍历

for循环是最基本也是最常用的数组遍历方法之一,可以使用临时变量,将长度缓存起来,避免重复获取数组长度,当数组较大时优化效果才会比较明显。它使用一个计数器变量来迭代数组元素,通常形式如下:

for(var i = 0; i < arr.length; i++){// arr 是要遍历的数组// arr[i] 是遍历的数组的元素// i 是数组的元素对应的下标(索引号)
}//对于数组遍历而言,我们可以利用for循环的计数器变量来访问数组中的每个元素,例如:
var array = [1, 2, 3, 4, 5];
for (var i = 0; i < array.length; i++) {console.log(array[i]);
}

二、for ... of 方法

for...of 循环是ES6新增的一种循环语法,它可以用于遍历数组、字符串、Map、Set等实现了iterator接口可迭代对象。与传统的for循环不同,for...of循环语句本身不包含初始化变量、循环条件和迭代器,而是直接遍历迭代对象中的每个元素。

for...of循环的语法如下:

for (variable of iterable) {// 循环体
}for(var item of arr) {// item 遍历的数组的元素
}var array = [1, 2, 3, 4, 5];
for (var element of array) {console.log(element);
}

这里的element变量会被依次赋值为数组中的每个元素,然后在循环体内输出到控制台上。

需要注意的是,for...of循环只能用于遍历可迭代对象不能用于普通对象。如果需要遍历对象的属性,可以使用for...in循环。

这里的回调函数只有一个参数element,表示当前处理的元素值,它会被依次传入数组中的每个元素。循环结束后,数组中的每个元素都会被遍历一遍,输出到控制台上。

需要注意的是,forEach方法会自动跳过数组中未定义的元素,因此在使用时不必担心数组中的空洞问题。

三、for...in循环

for...in循环是JavaScript中用于遍历对象属性的一种循环语句。与传统的for循环语句类似,for...in循环也需要指定一个迭代变量和一个可枚举对象。在每次迭代中,迭代变量会被赋值为可枚举对象的下一个属性名,然后我们就可以使用该属性名来访问对应的属性值。

for...in循环的语法如下:

for (variable in object) {// 循环体
}

其中,variable表示在每次迭代中,将要被赋值为对象中下一个可枚举属性的名称,object参数是一个普通对象。在循环体内,我们可以使用variable变量来访问当前遍历到的属性值。

例如,我们可以使用for...in循环遍历对象并输出每个属性的名称和值:

var obj = {name: 'Tom',age: 18,gender: 'Male'
};
for (var prop in obj) {console.log(prop + ': ' + obj[prop]);
}

四、forEach 遍历

forEach是JavaScript中数组的一个函数方法,forEach循环会自动迭代数组,对每个元素执行一个指定的回调函数,并跳过数组中未定义的元素。

用来遍历数组中的每一项,不影响原数组,性能差; 缺陷 你不能使用break语句中断循环,也不能使用return语句返回到外层函数。

for 与 forEach、map的区别:

  • 在固定长度或者长度不需要计算的时候 for 循环效率高于 foreach 和 map,for循环中可以通过break终止。
  • 在不确定长度或者计算长度有损性能的时候用foreach和map比较方便

forEach 和 map 区别:

相同点

1、forEach:用来遍历数组中的每一项,这个方法执行没有返回值,不影响原数组

2、map:支持return,相当与原数组克隆了一份,把克隆的每项改变了,也不影响原数组

不同点:

  • map方法返回一个新的数组,数组中的元素为原始数组调用函数处理后的值
  • forEach方法不会返回新数组

性能:

  •         for > forEach > map
  •         for 循环当然是最简单的,因为它没有任何额外的函数调用栈和上下文
  •         forEach 其次,因为它其实比我们想象得要复杂一些。它不是普通的 for 循环的语法糖,还有诸多参数和上下文需要在执行的时候考虑进来,这里可能拖慢性能;
  •         map 最慢,因为它的返回值是一个等长的全新的数组,数组创建和赋值产生的性能开销很大。

forEach方法的语法如下:

array.forEach(function(currentValue, index, array) {
// currentValue 遍历出的每一个元素
// index 元素对应的下标
// array 数组本身
// thisValue 返回值 (也可以不写返回值)
// 执行内容
}, thisValue);

例如,我们可以使用forEach方法遍历数组并输出每个元素:


let arr = [1, 2, 3, 4];
arr.forEach(item => {item = item * 2;
});
console.log(arr); // [1, 2, 3, 4]   原数组保持不变

五、map 映射

map() 是 JavaScript 数组的一个内置函数方法,用于对数组中的每个元素执行一个指定的函数,并返回一个新的数组。它不会修改原始数组,而是返回一个新的数组新数组的元素是回调函数的返回值

map() 方法语法如下:

array.map(function(currentValue, index, array) {// 执行内容
}, thisValue);

第一个参数是回调函数,它可以接受三个参数:当前处理的元素值currentValue、当前处理的元素索引index、当前正在操作的数组对象array。第二个参数thisValue可选,表示在执行回调函数时,将其作为函数体内this关键字的值。

例如,我们可以使用 map() 方法遍历数组并将每个元素乘以2:

var numbers = [1, 2, 3, 4, 5];
var doubledNumbers = numbers.map(function(num) {return num * 2;
});
console.log(doubledNumbers); // [2, 4, 6, 8, 10]

需要注意的是: map() 方法会返回一个新数组,而不是修改原有数组。它也不会修改原有数组中的元素。

六、filter方法

filter() 是 JavaScript 数组的一个内置函数方法,用于筛选数组中满足指定条件元素,并返回一个新的数组。它不会修改原始数组,而是返回一个新的数组,新数组中包含满足筛选条件的元素。

filter() 方法的语法如下:

array.filter(function(currentValue, index, array) {// 指定条件判断
}, thisValue);
var numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var filteredNumbers = numbers.filter(function(num) {return num >= 5;
});
console.log(filteredNumbers); // [5, 6, 7, 8, 9, 10]

七、reduce高阶函数(迭代(累加器))

reduce() 是 JavaScript 数组的一个内置函数方法,用于对数组中的元素进行累积操作,将数组缩减为一个值。它通过提供的回调函数来实现累积操作,并返回最终结果。

reduce() 方法的语法如下:

array.reduce(function(accumulator, currentValue, index, array) {// 累积操作
}, initialValue);

第一个参数是回调函数,它可以接受四个参数:累积器(accumulator)、当前处理的元素值(currentValue)、当前处理元素的索引(index)和当前正在操作的数组对象(array)。第二个参数initialValue可选,表示初始的累积值。

例如,我们可以使用 reduce() 方法对数组中的元素求和:

var numbers = [1, 2, 3, 4, 5];
var sum = numbers.reduce(function(total, num) {return total + num;
}, 0);
console.log(sum); // 15

需要注意的是,如果没有提供初始值(initialValue),那么数组的第一个元素将作为初始的累积值,并从数组的第二个元素开始进行迭代。如果数组为空且没有提供初始值,那么将抛出 TypeError 异常。

另外,reduce() 方法还有一些高级用法,例如可以用它来实现数组的最大值、最小值、求平均值等操作。通过在回调函数中编写相应的逻辑,可以灵活地对数组进行累积运算。

八、every

遍历数组,每一个元素都满足条件 则返回 true,否则返回 false

arrObj.every(function(item,index,self){// item 遍历出的每一个元素// index 元素对应的下标// self 数组本身// 有返回值 // 检测数组里的每一个值是否满足指定条件,如果有一个值不满足,返回false,剩余的值不再进行检测// 如果所有的值都满足,则返回true
});

九、some

对数组中每个元素执行一次function 函数,直到某个元素返回true,则直接返回true。如果都返回false,则返回false

arrObj.some(function(item,index,self){// item 遍历出的每一个元素// index 元素对应的下标// self 数组本身// 有返回值 // 检测数组里的每一个值是否满足指定条件,如果有一个值满足,返回true,剩余的值不再进行检测// 如果所有的值都不满足,则返回false
});
function some(id: number) {const arr = [{ cityId: 195, cityName: '深圳'},{ cityId: 196, cityName: '北京'},{ cityId: 198, cityName: '上海'}]let result = arr.some((item: any) => {return item.cityId === id})console.log(`传入:${id},结果:${result}`)}

十、find

遍历数组,返回符合条件的第一个元素,如果没有符合条件的元素则返回 undefined

      let arr = [1,2,2,3,3,3,3,4,4,5,6]let num = arr.find((item:any) => {return item === 3})console.log(num)

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

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

相关文章

Mac 双网卡

Mac 使用了双网卡, 一个网线, 一个WIFI. 局域网走一个网卡, ip 段是 192.168.10.0/24外网走一个网卡, ip 段是 192.168.50.0/24 1. 添加静态路由 为局域网添加静态路由, 192.168.10.0/24 无需为自己这个段添加静态路由. 在局域网中, 如果还有其他的网段(例如 192.168.20.0/…

WebSocket前后端建立以及使用

1、什么是WebSocket WebSocket 是一种在 Web 应用程序中实现双向通信的协议。它提供了一种持久化的连接&#xff0c;允许服务器主动向客户端推送数据&#xff0c;同时也允许客户端向服务器发送数据&#xff0c;实现了实时的双向通信。 这部分直接说你可能听不懂&#xff1b;我…

王麻子1651商标被王麻子跨类无效宣告!

近日“王麻子1651”商标被王麻子跨类无效宣告&#xff0c;最后不予注册&#xff0c;普推知产老杨了解“王麻子”是我国著名的老字号&#xff0c;创始于1651年&#xff0c;以刀剪闻名于世&#xff0c;刀剪的商标分类主要是在8类手工器械&#xff0c;而被无效宣告的商标在16类办公…

手机电脑通用便签推荐 好用便签下载

便签软件作为一种日常记录和管理工具&#xff0c;其实用性和便捷性深受用户喜爱。一款优秀的便签软件不仅能帮助我们随时随地记录重要信息&#xff0c;还能有效提高工作效率。然而&#xff0c;市场上很多便签应用仅限于单一平台使用&#xff0c;对于需要在手机和电脑间频繁切换…

游戏行业该如何选择适合的服务器?

游戏行业在互联网社会中发展的越来越好&#xff0c;当然每一款游戏的运行都是需要强大的服务器来支撑的&#xff0c;那么选择一个好的服务器会给企业带来更好的成果&#xff0c;今天万恒小编就来带大家去了解一下再游戏行业中怎样去选择合适的服务器。 首先在游戏这个行业中&am…

python pymysql怎么查询一列的数据

要使用Python的pymysql库查询MySQL数据库中一列的数据&#xff0c;你需要首先安装pymysql库&#xff08;如果尚未安装&#xff09;&#xff0c;然后建立与数据库的连接&#xff0c;并执行SQL查询语句。以下是一个简单的例子&#xff1a; 首先&#xff0c;安装pymysql库&#x…

如何到《新英格兰医学杂志》 NEJM查找下载文献

《新英格兰医学杂志》NEJM是世界上阅读、引用最广泛、影响力最大的综合性医学期刊之一。NEJM集团出版的期刊还包括NEJM Journal Watch、NEJM Catalyst及NEJM Evidence。NEJM是一份全科医学周刊&#xff0c;出版对生物医学科学与临床实践具有重要意义的一系列主题方面的医学研究…

《墨菲定律》读后感

《墨菲定律》这本书的书名有很大的迷惑性&#xff0c;因为墨菲定律的占幅不到全书的百分之一。这本书比较系统地总结了一些耳熟能详的可称之为人类社会运行的规律和法则&#xff0c;虽然书的内容还是多少有点“心灵鸡汤”的感觉&#xff0c;但好在涉及的范围足够广&#xff0c;…

ECS中播放 Animator 动画和控制Gameobject 显示状态

1、要在 ECS&#xff08;Entity Component System&#xff09;中播放 Animator 动画&#xff0c;需要先创建一个包含 Animator 组件的 Entity&#xff0c;并在相应的 System 中更新该 Entity 的 Animator 组件。以下是一个简单的示例代码&#xff1a; using Unity.Entities; us…

目标检测YOLO实战应用案例100讲-基于深度学习的交通场景多尺度目标检测算法研究与应用(中)

目录 3.4 实验结果与分析 深度融合注意力跨尺度复合空洞残差交通目标检测算法

漫谈:C C++ 嵌套包含与前置声明

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 目录 嵌套包含导致无限 要有…

盛邦安全拟战略收购卫星通信加密厂商天御云安

近日&#xff0c;远江盛邦&#xff08;北京&#xff09;网络安全科技股份有限公司&#xff08;以下简称“盛邦安全”&#xff0c;股票代码:688651)对外公布&#xff0c;拟使用自有资金不超过人民币3000万元持有北京天御云安科技有限公司&#xff08;以下简称“天御云安”&#…

electron 视频抓图并保存图片到本地

1. 思路&#xff1a; 1.1 通过canvas生成一块画布&#xff0c;在画布上绘制图形 let videoEl document.getElementById("testVideo");let params {videoEl,quality:0.95}let canvasEl document.createElement(canvas);canvasEl.width videoEl.width;canvasEl.he…

开启多线程下变量共享与私有问题

开启多线程下变量共享与私有问题 &#x1f335;ThreadLocal和Atomic是Java中用于多线程编程的两个重要工具。 ThreadLocal是一个线程局部变量&#xff0c;它为每个线程提供了独立的变量副本&#xff0c;确保每个线程都可以访问自己的变量副本而不会影响其他线程的变量。在多线…

json-server 模拟接口服务

前端开发经常需要模拟接口请求&#xff0c;可以通过 json-server 实现。 1. 安装 json-server 在前端项目的终端命令行中执行 npm i json-server2. 创建数据源 在项目中新建文件 db.json &#xff0c;与 package.json 同级&#xff0c;内容为模拟的数据 注意 json 文件对格式…

选择步入式高低温试验室价格除外还需要考虑哪些方面?

选择步入式高低温试验室时&#xff0c;价格是一个非常重要的考虑因素。但是&#xff0c;步入式高低温试验室价格不仅仅是主要决定因素&#xff0c;我们还需要考虑到设备的性能、质量、可靠性以及售后服务等多方面因素。接下来给大家具体介绍的关于选择步入式高低温试验室价格除…

conan2 基础入门(06)-conanfile.py入门

conan2 基础入门(06)-conanfile.py入门 文章目录 conan2 基础入门(06)-conanfile.py入门⭐准备预备文件和Code ⭐使用流程指令 ⭐具体讲解conanfile.pyconan install END视频教学 ⭐准备 注意&#xff0c;如果想跟好的学习conanfile.py建议使用python来安装conan。 当然使用其…

shell 脚本curl的时候,变量未被正确替换

有问题的脚本&#xff1a; updateRes\$(curl --location --request PUT http://172.16.80.88:3100/api/application/devopsBuildVersion \--header Authorization: bGFtcF93ZWJfcHJvOmxhbXBfd2ViX3Byb19zZWNyZXQ \--header Content-Type: application/json;charsetUTF-8 \--…

C++入门系列-构造函数

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 类的6个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何类在什么都不写时&#xff0c;编译器会…

Day 28 MySQL的数据备份与恢复

数据备份及恢复 1.概述 ​ 所有备份数据都应放在非数据库本地&#xff0c;而且建议有多份副本 备份&#xff1a; 能够防止由于机械故障以及人为误操作带来的数据丢失&#xff0c;例如将数据库文件保存在了其它地方 冗余&#xff1a; 数据有多份冗余&#xff0c;但不等备份&…