数组常用方法

image.png

for循环

使用计数器变量来迭代数组元素

var arr = [1,2,3,4,5]

for(var i=0;i<arr.length;i++){
    console.log(array[i])
}

上面的i就是计数器变量,初始值为0,每次循环后加1,直到i等于数组长度为止。在循环体内,可以通过数组索引arr[i]来访问每个元素。

forEach

forEach循环会自动迭代数组,对每个元素执行回调函数,并跳过数组中未定义的元素。
执行后不返回新数组

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

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

var arr = [1,2,3,4,5]

array.forEach(element=>{
    console.log(element)   //每个元素
})

for…of

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

element表示在每次迭代中,将要被赋值为迭代对象中下一个元素的变量,arr参数是一个可迭代对象,例如数组或字符串。在循环体内,可以使用elemente变量来访问当前遍历到的元素。

var arr = [1, 2, 3, 4, 5]; 
for (var element of arr) { 
    console.log(element); 
}

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

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

map

对数组中的每个元素执行一个指定的函数,并返回一个新数组。它不会修改原始数组,而是返回一个新的数组,新数组的元素是回调函数的返回值。

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

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

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

使用场景

  1. 转换数组中的元素:map 方法最常见的用法是根据数组中的每个元素进行转换,生成一个新的数组。
  2. 提取对象数组中的特定属性:如果数组中的元素是对象,可以使用 map 方法提取对象的特定属性,生成一个包含这些属性值的新数组。例如,从一个包含学生对象的数组中提取学生姓名。
  3. 处理异步操作:map 方法也可以用于处理异步操作,例如对数组中的每个元素进行异步处理并返回一个包含处理结果的 Promise 数组。

for…in

用于遍历对象属性的一种循环语句。for…in循环需要指定一个迭代变量和一个可枚举对象。在每次迭代中,迭代变量会被赋值为可枚举对象的下一个属性名,然后我们就可以使用该属性名来访问对应的属性值。
其中,ele表示在每次迭代中,将要被赋值为对象中下一个可枚举属性的名称,obj参数是一个普通对象。在循环体内,我们可以使用ele变量来访问当前遍历到的属性值。

var obj = { name: 'Tom', age: 18, gender: 'Male' }; 
for (var ele in obj) { 
    // ele--属性名   obj[ele]--属性值
    console.log(ele + ': ' + obj[ele]); 
}

这里的ele变量会被依次赋值为对象obj中的每个属性名,然后在循环体内使用obj[prop]来访问对应的属性值。循环结束后,所有属性名和属性值都会输出到控制台上。

需要注意的是,for…in循环不仅会遍历对象自身的属性,还会遍历对象原型链上的属性。因此,在使用for…in循环时,需要使用hasOwnProperty()方法来判断对象是否拥有该属性,以避免不必要的属性访问。

filter

用于筛选数组中满足指定条件的元素,并返回一个新的数组。它不会修改原始数组,而是返回一个新的数组,新数组中包含满足筛选条件的元素。如果没有满足条件的元素,返回的新数组将为空数组。

arr.filter(function(currentValue, index, arr) { 
    // 指定条件判断 
}, thisValue);

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

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]

使用场景

  1. 根据条件筛选列表数据,这是最常用的场景,根据自己的需要对原数组数据进行过滤
  2. 去除数组中的空值或无效值
  3. 去重,通过 filter 方法结合 indexOf 或 includes 方法,可以过滤掉数组中的重复元素

reduce

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

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

第一个参数是回调函数,它可以接受四个参数:累积器(accumulator)、当前处理的元素值(currentValue)、当前处理元素的索引(index)和当前正在操作的数组对象(array)。第二个参数initialValue可选,表示初始的累积值。
如果没有提供初始值(initialValue),那么数组的第一个元素将作为初始的累积值,并从数组的第二个元素开始进行迭代。如果数组为空且没有提供初始值,那么将抛出 TypeError 异常。

// 对数组中元素求和
var numbers = [1, 2, 3, 4, 5]; 
var sum = numbers.reduce(function(total, num) { 
    return total + num; 
}, 0); 
console.log(sum); // 15

回调函数接受两个参数total和num,total表示累积值,初始值为0,而num表示当前处理的元素值。在每一次迭代中,回调函数会将total与当前元素值num相加,然后返回新的累积值。最终,reduce() 方法返回的是最后一次迭代后的累积值。 使用场景

  1. 计算
  2. 去重
  3. 数组转化为对象:将数组转化为对象,通常用于处理键值对数据。
  4. 映射和筛选:可以结合条件判断,对数组进行映射和筛选操作。

some

返回这个数组部分符合条件的bool值,只要有一个存在,则返回为真,some 方法在找到满足条件的元素后会立即停止遍历,不会继续执行剩余元素的检查。

const array = [1, 2, 3, 4, 5];
const hasEvenNumber = array.some((element) => element % 2 === 0);
console.log(hasEvenNumber);  // 输出: true

使用场景

  1. 检查数组中是否存在特定元素,可以使用 some 方法来检查数组中是否存在某个特定值或满足特定条件的元素。
  2. 权限控制:在权限控制逻辑中, 用some 方法检查用户是否具有特定权限。
  3. 表单验证:在表单验证过程中,检查是否有任何字段未通过验证。

every

返回这个数组全部都符合条件的bool值,全部匹配则返回真

const numbers = [1, 2, 3, 4, 5];
const allEven = numbers.every((element) => element % 2 === 0);    // allEven 为 false

使用场景

  1. 检查所有元素是否满足条件,当数组中的每个元素都满足条件时,every 方法返回 true;否则返回 false
  2. 判断空数组:当前为空数组时方法会返回true,但一般不用every判断,判断空数组一般用array.length就可以了,严谨一点的话,可以结合Array.isArray()方法来确定变量是否为数组类型。

sort

对数组的元素进行排序。排序顺序可以是字母或数字,并按升序或降序。
直接改变原数组

[3,4,2,1,5].sort()      // => [1,2,3,4,5]

find

find筛选符合条件的第一个数据对象 返回的是符合条件的第一项的值 ,如果没有找到满足条件的元素,则返回 undefinedfind不会改变原数组,这个方法本身运行后的结果就是得到的那一个数据项

const numbers = [1, 2, 3, 4, 5];
const foundNumber = numbers.find((element) => element > 3);   // foundNumber 为 4 
  1. 查找对象属性,find 方法常用于从对象数组中查找具有特定属性值的对象,比如找到数组中id为2的数据。
  2. 处理数据不存在或不满足所需条件的情况,当 find 方法找不到满足条件的元素时,它返回 undefined。可以利用这一点来处理找不到元素的情况。

findIndex

返回符合测试条件的第一个数组元素索引,如果没有符合条件的则返回 -1。不改变数组的原始值

let list = [1, 2, 3];
list.findIndex((item => item > 1));

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C 强制类型转换

强制类型转换是把变量从一种类型转换为另一种数据类型。例如&#xff0c;如果您想存储一个 long 类型的值到一个简单的整型中&#xff0c;您需要把 long 类型强制转换为 int 类型。您可以使用强制类型转换运算符来把值显式地从一种类型转换为另一种类型&#xff0c;如下所示&am…

攻防演练 | redis艰难写shell进入内网

背景 某地市级攻防演练 要求 拿到指定单位的靶标系统&#xff08;必须是web后台管理权限数据库服务器&#xff09; 正式开始 redis未授权 首先通过信息收集获取到了一些IP&#xff0c;且发现一个IP中存在redis未授权。 此时兴冲冲的去尝试写入定时任务反弹shell&#xff…

淘宝评论数据API接口:洞察消费者声音的关键工具

淘宝评论数据API接口&#xff1a;洞察消费者声音的关键工具 请求示例&#xff0c;API接口接入Anzexi58 随着电子商务的蓬勃发展&#xff0c;消费者对于商品的评价和反馈成为了购物决策中不可或缺的一部分。淘宝作为中国最大的电商平台之一&#xff0c;汇聚了海量的商品和评论数…

【SpringBoot】-- mapstruct进行类型转换时Converter实现类不能自动生成代码问题解决

问题描述 我的问题如下&#xff1a; 应该在红色区域生成对应的转换细节&#xff0c;但是这里只返回了一个空对象 问题解决 加入lombok-mapstruct-binding依赖,也要注意依赖引用顺序问题 <dependency><groupId>org.projectlombok</groupId><artifactId&…

photomaker:customizing realistic human photos via stacked id embedding

PhotoMaker: 高效个性化定制人像照片文生图 - 知乎今天分享我们团队最新的工作PhotoMaker的技术细节。该工作开源5天Githubstar数已过6千次&#xff0c;已列入Github官方Trending榜第一位&#xff0c;PaperswithCode热度榜第一位&#xff0c;HuggingFace Spaces趋势榜第一位。项…

小阳同学刷题日记-54. 螺旋矩阵

题目&#xff1a;给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 思路&#xff1a; 初始化四个边界指针&#xff1a;top, bottom, left, right 分别表示当前螺旋遍历的上边界、下边界、左边界和右边界。不断遍历矩阵直…

Windows虚拟主机上多个域名访问同一个网站

近日老板提出了想要多个域名访问同一个网站的想法。这边了解后&#xff0c;由于我们公司使用的是Hostease的Windows虚拟主机产品&#xff0c;因此咨询了Hostease的技术支持&#xff0c;寻求帮助了解到可以实现Windows主机上多个域名访问同一个网站&#xff0c;是需要进入Window…

win10如何移除此电脑下的“网络”

1.按住winr,然后输入regedit打开注册表&#xff0c;在导航栏输入&#xff0c;定位到ShellFolder文件夹 HKEY_CLASSES_ROOT\CLSID\{F02C1A0D-BE21-4350-88B0-7367FC96EF3C}\ShellFolder2.更改权限&#xff0c;在ShellFolder文件夹上右键选择权限->高级->更改->输入Adm…

antd vue table控件的使用(三)

今天就讲讲Ant Design Vue下的控件----table表格&#xff08;分页、编辑和删除功能&#xff09; 结合项目中的需求&#xff0c;看看如何配置,让table即可以展示列表&#xff0c;又可以直接编辑数据。需求&#xff1a; &#xff08;1&#xff09;展示即将检查的数据列表&#…

通过WebShell登录SQL Server主机并使用SSRS报表服务

背景信息 RDS SQL Server提供了WebShell功能&#xff0c;允许用户通过Web界面登录到RDS SQL Server实例的操作系统中&#xff0c;并在该操作系统中执行命令、上传下载文件等操作。WebShell功能方便用户对RDS SQL Server实例的管理和维护&#xff0c;特别是在无法使用SSH客户端的…

FlashAttention V1 学习笔记

Flash Attention 是一种新型的注意力机制&#xff0c;旨在解决传统 Transformer 模型在处理长序列数据时面临的计算和内存效率问题。它通过一系列创新的技术优化&#xff0c;显著提高了注意力机制的计算速度和内存使用效率&#xff0c;同时保持了精确的结果&#xff0c;不依赖于…

超好用的iframe的postMessage穿参

前言 ❝ 跨域&#xff0c;简单来说是指不同域之间相互请求资源&#xff0c;例如AJAX请求&#xff0c;浏览器根据同源策略对响应结果进行拦截&#xff0c;这是浏览器对JavaScript实施的安全限制。所谓同源是指相同的域名、协议和端口&#xff0c;只要其中一项不同就为跨域 ❞ 背…

C++11异常:到底是怎么个异常

目录​​​​​​​ 一、C/C如何处理错误 1.1C语言传统的处理错误的方式 1.2C异常概念 二、异常的使用 2.1异常的抛出和捕获 2.2try/catch的使用 2.3异常安全 2.4异常的重新抛出 2.5异常的规范 三、服务器开发中异常体系的模拟 一、C/C如何处理错误 1.1C语言传统的处…

SEO关键词布局时如何查找用户爱搜索的关键词?

在关键词布局中&#xff0c;确定完核心词后&#xff0c;就要考虑在网站关键词扩展时&#xff0c;找到用户爱搜索的词&#xff0c;只有在网站页面关键词布局时&#xff0c;布局用户爱搜索的词&#xff0c;才能够使用户在搜索时网站的页面能够有机会出现在用户的搜索结果页&#…

蓝桥杯算法题:栈(Stack)

这道题考的是递推动态规划&#xff0c;可能不是很难&#xff0c;不过这是自己第一次靠自己想出状态转移方程&#xff0c;所以纪念一下&#xff1a; 要做这些题目&#xff0c;首先要把题目中会出现什么状态给找出来&#xff0c;然后想想他们的状态可以通过什么操作转移&#xf…

个人成长秘籍:参加六西格玛绿带培训的好处

在当今竞争激烈的商业环境中&#xff0c;追求卓越与持续改进已成为企业和个人成功的关键。六西格玛绿带培训&#xff0c;作为一种全面提升管理技能和工作效率的培训课程&#xff0c;不仅帮助企业优化流程、提高质量和效率&#xff0c;也为个人职业发展开辟了一条光明大道。张驰…

cog predict docker unknown flag: --file

如图&#xff1a; 使用cog predict -i image“link-to-image” 出现docker unknown flag: --file的问题。 解决方法&#xff08;对我可行&#xff09;&#xff1a;切换cog版本。 这个是我一开始的cog安装命令&#xff08;大概是下的最新版&#xff1f;&#xff09;&#xff1…

cannal的使用

搭建MySQL 安装canal 1.新建文件夹logs, 新建文件canal.properties instance.properties docker.compose.yml instance.properties ################################################# ## mysql serverId , v1.0.26 will autoGen # canal.instance.mysql.slaveId0# enable g…

【话题:工作生活】2022年工作总结--疫情下的上海,疫情中的我。

现在是阳历2023年11月27日星期一&#xff0c;我再次开始撰写自己的年终工作总结。希望再过1、2个月&#xff0c;这份年终总结能够出炉&#xff0c;与大家相遇。 给自己定个小目标&#xff0c;年终的工作生活总结坚持写10年。我2017年毕业&#xff0c;之后就开始写每年的年终总结…

MathJax的基本使用

一、引言 MathJax引擎是一个开源的JavaScript库&#xff0c;它允许Web开发者在网页中嵌入高质量的数学公式。通过利用Web的最新技术&#xff0c;MathJax引擎可以解析LaTeX、MathML和AsciiMath等数学标记语言&#xff0c;并将其渲染为可视化的数学公式&#xff0c;这些公式可以…