JavaScript(1)高阶函数filter、map、reduce

JavaScript(1)高阶函数filter、map、reduce前言需求:有这样一个数组[10,20,110,200,60,30,40]1.筛选出数组中小于100的元素2.将筛选出的每个元素的值x23.完成第2步之后,将数组中的所有元素加起来

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

前言

需求:有这样一个数组[10, 20, 110, 200, 60, 30, 40]
1.筛选出数组中小于100的元素
2.将筛选出的每个元素的值x2
3.完成第2步之后,将数组中的所有元素加起来
 

普通方法

如果我们还没接触过filtermapreduce,那么就是用for循环

<script>
  list = [10, 20, 30, 40, 60, 110, 200]
  newList = []
  newList2 = []
  total = 0
  // 第1次for循环把小于100的数加入新的数组newList
  for (item of list){
    if (item<100){
      newList.push(item)
    }
  }
  // 第2次for循环把所有的元素值乘以2
  for (item of newList){
    newValue = item * 2
    newList2.push(newValue)
  }
  // 第3次for循环把数组中的全部元素加起来
  for (item of newList2){
    total += item
  }
  console.log(total)
</script>

以上写起来非常繁琐,还要定义很多变量,代码阅读起来也不是很好,其实我们有更好的方式,下面介绍
 

filter

检测数值元素,并返回符合条件所有元素的数组。
 

定义和用法

filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素
 
注意
filter() 不会对空数组进行检测。
filter() 不会改变原始数组。
 

语法

array.filter(function(currentValue,index,arr), thisValue)

参数说明如下:

  • function(currentValue, index, arr):必填函数,数组中的每个元素都会执行这个函数
    • currentValue:必填,当前元素的值
    • index:可选。当前元素的索引值
    • arr:可选。当前元素属于的数组对象
  • thisValue:可选。对象作为该执行回调时使用,传递给函数,用作 this 的值。如果省略了 thisValuethis 的值为 undefined
     

小练习

使用filter函数筛选出[10, 20, 110, 200, 60, 30, 40]小于100的

list = [10, 20, 30, 40, 60, 110, 200]
newList = list.filter(function (n) {
  return n < 100
})
console.log(newList)

打印结果

[10, 20, 30, 40, 60]

 

map

通过指定函数处理数组的每个元素,并返回处理后的数组。
 

定义和用法

map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。
map() 方法按照原始数组元素顺序依次处理元素。
 
注意
注意: map() 不会对空数组进行检测。
注意: map() 不会改变原始数组。
 

语法

array.map(function(currentValue,index,arr), thisValue)

参数说明如下:

  • function(currentValue, index, arr):必填函数,数组中的每个元素都会执行这个函数
    • currentValue:必填,当前元素的值
    • index:可选。当前元素的索引值
    • arr:可选。当前元素属于的数组对象
  • thisValue:可选。对象作为该执行回调时使用,传递给函数,用作 this 的值。如果省略了 thisValue,或者传入 nullundefined,那么回调函数的 this 为全局对象。
     

小练习

将数组[10, 20, 30, 40, 60]中的每个元素值乘以2

<script>
  list = [10, 20, 30, 40, 60]
  newList = list.map(function (n) {
    return n * 2
  })
  console.log(newList)
</script>

打印结果

[20, 40, 60, 80, 120]

 

reduce

将数组元素计算为一个值(从左到右)
 

定义和用法

reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
reduce() 可以作为一个高阶函数,用于函数的 compose
注意:reduce() 对于空数组是不会执行回调函数的。
 

语法

array.reduce(function(total, currentValue, currentIndex, arr), initialValue)

参数说明如下:

  • function(total,currentValue, index,arr):必填函数,数组中的每个元素都会执行这个函数
    • total:必填。初始值, 或者计算结束后的返回值。
    • currentValue:必填,当前元素的值
    • index:可选。当前元素的索引值
    • arr:可选。当前元素属于的数组对象
  • initialValue:可选。传递给函数的初始值
     
     

小练习

计算数组之和[20, 40, 60, 80, 120]

<script>
  list = [20, 40, 60, 80, 120]
  newList = list.reduce(function (total, n) {
    return total + n
  }, 0)
  console.log(newList)
</script>

打印结果

320

 

使用filter和map和reduce完成案例

上面我们分别介绍了3个高阶函数,接下来结合起来使用
 

方式1

<script>
  list = [10, 20, 110, 200, 60, 30, 40]
  newList = list.filter(function (n) {
    return n < 100
  }).map(function (n) {
    return n * 2
  }).reduce(function (total, n) {
    return total + n
  })
  console.log(newList)
</script>

 

方式2

<script>
  list = [10, 20, 110, 200, 60, 30, 40]
  newList = list.filter(n => n < 100).map(n => n * 2).reduce((total, n) => total+n);
  console.log(newList)
</script>

以后我们就可以一行代码完成上面的需求,而不需要使用for循环了

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/165742.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • mysql导入Excel表格中文表头_把一个表里的数据导入另一个表

    mysql导入Excel表格中文表头_把一个表里的数据导入另一个表一,Linux版本1.先把Excel的xls格式转为csv3.用notepad++转为uft8编码4.然后转为txt格式5.将本地文件上传到服务器上选择数据库5.创建表格式要跟Excel一样createtableclass(idvarchar(20),namevarchar(20),chinesevarchar(20),mathvarchar(20),englishvarchar(20),physicsvarchar(20)

  • 如何在阿里云服务器部署程序并用域名直接访问

    如何在阿里云服务器部署程序并用域名直接访问闲来无事,买了一个最便宜的阿里云服务器来学习,一年三百多,适合新手了解程序等。一般买服务器只有公网的IP地址,也就是类似10.205.25.32这种形式的。如何想用域名(例如www.baidu.com)直接访问的你网站,可以在阿里云直接再买个域名,将域名解析绑定ip地址。有人想知道怎么解析域名,我这里补充一下域名相关内容1.域名:…

  • django drf_mnbkdrf

    django drf_mnbkdrf前言我们上篇文章使用到了Serializer类,可能有小伙伴说太过复杂,那么本篇就为大家带来更加简便的序列化类ModelSerializerModelSerializer先来看下ModelSer

  • 为什么有些人除了上课时间以外都没有学习,成绩却还是很好?

    为什么有些人除了上课时间以外都没有学习,成绩却还是很好?新高二学生,成绩在班级10~12名左右。有两个女生特别6。第一个,我室友,上课以外的时间都是看漫画,看小说,画画,睡觉,吃零食。但是成绩就是很好,她化学进了学校的竞赛培训班,数学也很好,但是平时完全没有死命学的迹象。第二个,另一个寝室的,我们是寄宿学校要求交手机,她没交,经常看见她玩,成绩也是铁打的特别好。我观察了一下,她们共同特点就是上课听讲特别认真,然后就是会玩。我真的很想

  • 互联网java软件工程师

    互联网java软件工程师职位诱惑:高并发,分布式,氛围好,待遇不错职位描述:岗位职责:1、负责公司支付、推荐、云服务、应用商店、账号、开发者平台、论坛等系统的分析设计、开发实现和持续改善;2、参与产品分析和规划,完善和优化开发过程;3、研究和实践相关技术及实现原理。岗位要求:1、本科及以上学历,3年以上java开发经验;2、精通Java语言,熟练掌握JavaWEB

  • java jsonobject 转换_java – 将JSONObject转换为JSONArray

    java jsonobject 转换_java – 将JSONObject转换为JSONArray我目前正在学习一些使用JAVA的android编程.我的老师分享了这段代码,它将使用API​​,获取其JSON文件,并将其转换为JSONArray文件.然后,他将遍历该JSONArray并将它们放入ArrayList,然后将它们显示在一个活动上.问题是我正在使用的API会返回一个JSONObject文件,而我不知道如何正确地将其转换为JSONArray.importandroid.util.Lo…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号