js 数组遍历方法详解(map、filter、find、findIndex、reduce)_js map filter reduce find-程序员宅基地

技术标签: js 详解系列  前端  es6  javascript  

前言

数组遍历方法是js最常用的一类方法,也是工作中必须掌握的一类方法,我们处理业务逻辑,大多都要对数组内的统一格式的数据进行遍历。

本文以map的详细解释,让读者先掌握这一类型方法的统一模式,再介绍filter、find、findIndex、reduce等相似性,这样能够将一类的方法全部记住。

map

map是什么

map是操作js数组的方法,也可以说是一个函数,作用是遍历整个数组,对里面的每个值做处理再返回一个新的值

map方法的结构及入参

map的入参需要传递一个函数进去,因为说它是可以遍历数组的,所以传入的这个函数调用的次数由数组的长度决定,长度是3就是3次,是4就是4次。

//index可以不传
[1, 2, 3].map(function (item, index) {
    
    //这个数组长度是3所以函数调用3次
    //item指的遍历到的对应的数组值 函数调用的三次中 第一次是1 ,然后是2、3
    //index是数组的索引,三次分别是0,1,2
})

上面的例子意思就是map里面的函数运行了3次,分别是function(1,0)、function(2,1)、function(3,2)

然后你可以做什么呢,可以在函数里面return(return的内容将作为新值代替数组遍历到的旧值item),比如将函数里面的值都变成原来的两倍:

let b = [1, 2, 3].map(function (item, index) {
    
    return item * 2
})
console.log(b)//[2,4,6]

语法糖

es6给我们提供了一些便利,比如箭头函数()=>{}
我们可以用箭头函数替代原来的函数:

let b = [1, 2, 3].map((item, index) => {
    
    return item * 2
})
console.log(b)//[2,4,6]

用箭头函数有什么好处呢?好处是,如果里面不用进行复杂的判断,我们可以将右边的{}改成表达式直接返回,省略return:

let b = [1, 2, 3].map((item, index) => item * 2 )
console.log(b)//[2,4,6]

我们这里例子里面函数第二个入参index索引值没用到,所以我们可以不传,当入参只有一个时,前面的括号()都可以省略。

let b = [1, 2, 3].map( item => item * 2 )
console.log(b)//[2,4,6]

语法糖会让你的代码看起来更加高级优雅。

还有,有时候你可能不想改变所有的值,比如我只想改变小于2的数字,其他的不变,那就进行判断不满足条件的把item原路返回:

let b = [1, 2, 3].map(item => {
    
    if (item < 2) {
    
        return item * 2
    } else {
    
        return item
    }
})
console.log(b)//[2,2,3]

当然你可以改成用三目运算。

let b = [1, 2, 3].map(item=>{
    
   //返回,当item<2的时候返回item*2否则返回item
   return item < 2 ? item * 2 : item
})
console.log(b)//[2,2,3]

然后你又发现,它只有一个return,可以用语法糖。

let b = [1, 2, 3].map(item => item < 2 ? item * 2 : item)
console.log(b)//[2,2,3]

map一般不改变原数组

除非是嵌套了对象或者数组的数组你直接修改了内部的引用地址,一般数组使用map是不会改变原数组的,你得找人接收。

let a = [1, 2, 3]
let b = a.map(item => item < 2 ? item * 2 : item)
console.log(a)//[1,2,3]
console.log(b)//[2,2,3]

filter

相信你看完map已经对这种数组遍历形式有了一个概念,接下来介绍filter,它用于遍历,筛选掉你不需要的值,保留需要的。

说明

filter与map的区别就是:

  1. map的入参函数中的return的内容将作为新值代替数组遍历到的旧值item

  2. 而filter的的入参函数中的return负责返回true或false,当return为true时当前遍历到的item将保留,如果为false,代表不符合要求将被筛选掉

map和filter相同点是都返回一个新数组

例子

比如一个数组中,我只需要小于3的内容。

let a = [1, 2, 3]
let b = a.filter((item, index) => {
    
    if (item < 3) {
    
        return true
    } else {
    
        return false
    }
})
console.log(b) // [1,2]

然后聪明的你会发现item<3为true时返回true,为false时返回false,那我们只需要返回条件即可。

let a = [1, 2, 3]
let b = a.filter((item, index) => {
    
    return item < 3
})
console.log(b) // [1,2]

只有一个返回值,所以?我们去掉{}和return,同时index没用到也可以去掉。

let a = [1, 2, 3]
let b = a.filter(item => item < 3)
console.log(b) // [1,2]

find 和 findIndex

很好,你已经掌握了map和filter,接下来我们势如破竹。

说明

find和findIndex它们也是筛选,与filter一样需要在入参函数里返回ture和false。

与filter不一样的是,它们只筛选出我们需要的第一个值,用于在一个数组找到我们需要的内容,而且find和findIndex不返回新数组

find会返回找到对应的元素。

findIndex会返回找到对应的元素下标。

例子

比如我们需要找到数组中第一个大于1的元素的内容与下标。

let a = [1, 2, 3]
let item = a.find(item => item > 1) //返回第一个大于1的元素,就是遍历到2的时候
let itemIndex = a.findIndex(item => item > 1) //返回第一个大于1的元素的下标,就是遍历到2的时候,此时下标为1
console.log(item, itemIndex) // 2 1

reduce

最后我们再学习reduce,它有些不一样。

说明

reduce入参中的那个函数入参改变了,item移动到了第二位,与前面那些方法的item一个意思,第一个入参变成了结果变量res。

reduce入参除了一个函数,还多了一个入参,该入参可以作为结果变量的初始值,就是res的初始值,就是下方例子中的0。

而reduce中的入参函数的返回值将会作为下一个遍历的res的值,也就是reduce的意图是,我们可以通过遍历一个数组去修改我们这个结果变量。

例子

比如我们希望累加一个数组中的值。

于是我们设置一个结果变量为0,将第一次遍历到的item值1加到结果变量0上(结果为1),返回。

该返回值1又会作为下一次遍历的res,再将第二次遍历到的item值2加上去(结果为3),返回。

该返回值3又会作为下一次遍历的res,再将第二次遍历到的item值3加上去(结果为6),返回。

遍历结束,res最终值6,将会作为reduce函数的返回值

let a = [1, 2, 3]
let b = a.reduce((res, item) => {
    
    return res + item
}, 0)
console.log(b) // 6

尾言

如果觉得文章还不错的话,欢迎点赞收藏哦,有什么错误或者意见建议也可以留言,感谢~

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43877799/article/details/124426129

智能推荐

值得看三次的高干文_5本精彩的高干文推荐,本本是经典,值得刷三遍以上!...-程序员宅基地

文章浏览阅读9.1k次。大家好,欢迎来到”爱看书的小芒果”的百家号,我是你们亲爱的小编,我每天都在这里给大家推荐好看的小说,今天给大家带来的是5本精彩的高干文推荐,本本是经典,值得刷三遍以上!喜欢这一类型小说的朋友们不容错过哦!关注小编每天给大家推荐好看的小说!远离书荒问题!欢迎各位书迷宝宝们踊跃排雷,有喜欢的小说也可以在下方留言给小编安利哦!简介:5本精彩的高干文推荐,本本是经典,值得刷三遍以上!事业有成的金窈窕睁开眼..._刷n遍的高干文

ubuntu16下googletest安装及常见错误解决办法_ubuntu googletest is missing-程序员宅基地

文章浏览阅读1.7k次,点赞5次,收藏17次。ubuntu16下googletest安装及常见错误解决办法安装googletest在make时报错安装googletest第一步:获取googletest源代码(这个链接下载速度还是很快的)权限不够自己加sudogit clone https://github.com.cnpmjs.org/google/googletest.git第二步:进入googetest文件cd googletest第三步:gtest编译(如果没有cmake,先安装cmake,sudo apt-get instal_ubuntu googletest is missing

Python时频变换(傅里叶变换)_可学习时频变换-程序员宅基地

文章浏览阅读5.2k次。参考博客: https://blog.csdn.net/on2way/article/details/46981825 https://www.cnblogs.com/ranjiewen/p/6241913.html 参考书籍: 《数字图像处理第三版》(冈萨雷斯) 《信号与系统第二版》(奥本海姆)本博客不会讲述过多的公式与证明(我不会说在博客输入公式好麻烦)。..._可学习时频变换

MIMIC-IV数据库安装保姆级视频教程_mimic数据库 保姆级教程-程序员宅基地

文章浏览阅读1.4k次。MIMIC-IV数据库保姆级安装教程_mimic数据库 保姆级教程

程序员笔试面试题汇总_程序员 面试 机考-程序员宅基地

文章浏览阅读821次。自己面试了三个多月时间,把经常问到的自己不会或叫不准的问题记录了下来,希望对读者有帮助。问题有点多,也可能有重复的问题,越重复表明面试官越爱问,而且自己卡那的次数相对比较多。面试了很多的大公司,也有一些面试经验与大家分享程序员面试经验总结,其中包括面试时要注意的细节等等,都是自己一路面试下来的思考与反思。Java面试越来越难,现在更多的是问:开源框架源代码、开源框架架构图、项目系统整体架构、实际工..._程序员 面试 机考

Sketch_sketch是什么csdn-程序员宅基地

文章浏览阅读470次。一、Sketch的简介Sketch是什么?Sketch是一款轻量、高效的矢量设计工具,它在矢量编辑基础上,提供了基本的位图样式支持(例如模糊和颜色调节),支持矩形工具、文字工具、布尔运算等功能。你可以把它看做是简化版的Photoshop。但需要注意的是,Sketch不是一款位图编辑器。这就是说,你如果想做的是照片修正、画笔绘图,这款软件就不合适。Sketch的优缺点优点:小清新颜值高 :界面简洁美好,功能清晰。无悬浮面板,选择一个对象/图层(objects)就会展示对应检查器(inspector_sketch是什么csdn

随便推点

arp spoofing on linux-程序员宅基地

文章浏览阅读69次。http://linux.vbird.org/linux_server/0230router.phpARP Spoofing/ARP PoisoningARP stands for Address Resolution Protocol and it allows the network to translate IP addresses into MAC addresses..._spoofing linux

python上传文件到http服务器,python 使用poster模块进行http方式的文件传输到服务器的方法...-程序员宅基地

文章浏览阅读605次。python 使用poster模块进行http方式的文件传输到服务器的方法这几天帮内部人员做一个文件传输的小工具,要用http的方式,在用django搭建了个小框架之后,如何进行传输,特别是大文件的传输,成为主要问题。经过查资料,最后选择了通过poster这个模块来进行文件的传输,方式如下:from poster.encode import multipart_encodefrom poster...._python将大华的视频流推送到http服务器

x200换屏_单位下来几台THINKPAD X200 X200S LED高分屏 X200 LED 屏-程序员宅基地

文章浏览阅读281次。二手商品 慎重购买 要求过高的朋友建议买新货鸽子勿扰,以前放过鸽子的一律不确认机器不接刀 不包邮 机器都没有硬盘内存,盖子 硬盘托架都配好QQ 1654110798https://item.taobao.com/item.htm ... amp;id=5276233055421THINKPAD X20012.1宽屏LCD 成色不错 键盘无油P8600 2.4G无线 蓝牙 指纹无内存 无硬盘..._thinkpad x200屏幕升级

使用SQL实现广告的精准投放_sql广告-程序员宅基地

文章浏览阅读1.1k次。1 提出问题:如何实现广告的精准有效投放。 2 分析思路 3 数据来源 4 数据理解 5 数据清洗 6 构建模型 7 总结_sql广告

python判断x是否为奇数表达式_若希望当x的值为奇数时,表达式的值为“真”,x的值为偶数时,表达式的值为“假”。则以下不能满足要求的表达式是( )。...-程序员宅基地

文章浏览阅读1.2k次。【单选题】已知x,y=5,10;则表达式print(x and not y)的输出结果是:( )【判断题】3.13 交流电压下串联介质中电场强度的分布与介质的εr成正比。【单选题】6.9 下列各式避雷器放电电压的说法错误的是( )【单选题】关于字符串下列说法错误的是 ( )【单选题】下列哪种数据类型是整型()【单选题】>>>True+True的输出结果是【单选题】血凝..._判断整数 x 是奇数的 python 条件表达式是_______________________

java 单体 启动优化_想要开挂进阶Java架构师?这份超强(长)学习计划单 请签收!...-程序员宅基地

文章浏览阅读118次。优秀工程师的成长之路就是一条不断打怪升级之路的“修仙之路”!而Java程序员一向比别人更难,如果说大家都在修仙的话,java程序员简直神似“剑修”,入行枯燥精通难,要想变得强大,需要能力也需要运气,更需要持之以恒。学习久了,难免会面临以下的困惑:具备有1年以上Java开发经验,不知道怎么快速提升竞争力缺乏Java整体认知,想要建立完善的知识体系梦想进入BATJ等名企,渴望掌握大厂核心技术跳槽屡屡碰..._java单体架构怎么启动