我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何理解函数式编程array.filter工具

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何理解函数式编程array.filter工具

本篇内容主要讲解“如何理解函数式编程array.filter工具”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解函数式编程array.filter工具”吧!

我们何其幸运!这个世界上竟然还有几乎完全支持FP编程的流行语言,这种语言就是StackOverflow上历年兵器排行榜,常年霸榜第一的JavaScript。

函数式编程利于且成就思考,当我们耽玩于scheme,lisp等函数范式的编程语言,却遗憾于他们在真实的世界中绝无用武之地,唯有elisp似乎能稍微补足点缺憾而用到  emacs上,但是也仅此而已。

然而,我们何其幸运!JavaScript竟然几乎完全支持函数式编程思想,甚至在React的带动下,有朝着FP函数式编程,一条路走到黑的喜人局面。

我们何其幸运!JavaScript 同僚们。

编程从何起步呢?试看人类历史上第二古老的编程语言的名字:Lisp,对 list processing,编程语言就是处理list,  一切从list数组起步。我们每天要处理的任务是 list,我们的早餐清单是 list,甚至于女神也有备胎清单 list。一个 List  就能抽象与概括出,我们人类文明所有的一切。

人类认识到了这一点,因此将古老的语言命名为 lisp,list processing。

如何理解函数式编程array.filter工具

因此,我们脚下的路也从 list 起步。

零、前文概要

前文中,我们阐述了处理数组最核心的武器 array.reduce。array.reduce 就是  “太极生两仪”的太极,是一切变化的起点,所有的其他工具都能用array.reduce模拟出来。

array.reduce的本质就是将数列降为为一个值。

如何理解函数式编程array.filter工具

紧接着,我们以array.reduce为基础,推导出来 array.ma。array.map 将数学思路而直接应用于编程。

如何理解函数式编程array.filter工具

array.reduce与array.map的共同特征都对array作变形transform处理。下面,我们来领略帮助我们逻辑思考的部分  array.filter 与 array.find (array.findIndex).

一、array.filter 思维的筛子

逻辑判断与筛选的核心是一个关键词 predicate。拆解这个单词 pre 是事先,而 dict  是说出与展示(比如dictionary是展示字的字典)。因此 predicate logic,就是执行代码之前,先说出是否符合条件。

array.filter的应用简单直接,就如我们思维的自然流动:

[1, 4, 7].filter(x => x > 3); //[4, 7] // 或者携程 [1, 4, 7].filter( x =>                  { return x > 3;})

执行过程如图所示:

如何理解函数式编程array.filter工具

二、array.filter 的应用案例

我们着手考察一个真实生活中的案例,处理以JSON存储的财务账单:

const accountBalance = {   accountsData: [     {       id: "user01",       balance: 888,     },     {       id: "user02",       balance: 999,     },     {       id: "user03",       balance: -18,     },     {       id: "user04",       balance: -20,     },     {       id: "user05",       balance: 1,     },   ], };

如何从账单筛选出来银行资产为负值的账户信息呢。此时,当我们看到 filter 的时候,真喜出望外,其应用与我们的思维过程完全一致。

const negativeAccount = accountBalance.accountsData.filter(v => v.balance < 0); console.log(negativeAccount); // 输出结果 //[ { id: 'user03', balance: -18 }, { id: 'user04', balance: -20 } ]

然后,再应用前文的学过的技术,array.map 将负债账户的 ID 提取出来。

const negAccIds = accountBalance.accountsData     .filter(v => v.balance < 0)     .map(v => v.id); // : [ 'user03', 'user04' ]

 三、用 array.reduce 模拟 array.filter

再回头一切的起点 array.reduce,他是源头,大江大河都发源于 reduce。换言之,我们始终都是再用reduce思考问题。

着手以 reduce 模拟实现 array.filter():

const newFilter = (arr, fn) =>   arr.reduce((x, y) => (fn(y) ? x.concat(y)                         : x),             []);

测试之后,得到相同的结果:

const negAccIds = accountBalance.accountsData     .newFilter(v => v.balance < 0)     .map(v => v.id); // : [ 'user03', 'user04' ]

此处,我们也能看到应用reduce的关窍只在于,头脑中要有最终降维到一个值的那个accumulator.

arr.reduce(callback( accumulator, currentValue, [, index[, array]] )[, initialValue])

到此,相信大家对“如何理解函数式编程array.filter工具”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何理解函数式编程array.filter工具

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何理解Linux下的命令行编程工具Awk

这篇文章主要介绍“如何理解Linux下的命令行编程工具Awk”,在日常操作中,相信很多人在如何理解Linux下的命令行编程工具Awk问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何理解Linux下的命令行编
2023-06-13

如何理解StatefulSet中应用编排工具Deployment

这篇文章给大家介绍如何理解StatefulSet中应用编排工具Deployment,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、“有状态”需求我们之前讲到过 Deployment 作为一个应用编排管理工具,它为我们
2023-06-04

函数式编程如何与golang并发编程相结合?

函数式编程和并发编程结合的好处:数据不可变性:使用不可变数据避免共享和竞态条件。纯函数性:使用纯函数处理通过管道的消息,避免状态突变和竞态条件。并发的可预测性和正确性:确保并发操作的正确性和可预测性。函数式编程与 Go 并发编程的结合函数
函数式编程如何与golang并发编程相结合?
2024-05-04

golang函数式编程中如何处理输入和输出?

函数式编程使用管道和 goroutine 处理输入和输出。处理输入时,使用管道和 goroutine 对流数据并行处理。处理输出时,使用管道将数据从一个函数传递到另一个函数。实战案例中,使用管道将处理函数和输出函数连接起来,实现输入处理和输
golang函数式编程中如何处理输入和输出?
2024-05-01

Centos7 Shell编程之正则表达式、文本处理工具详解

正则表达式可以很灵活的提供各种模糊匹配的筛选规则。常被用来检索、替换那些符合某个模式的文本,这篇文章主要介绍了Centos7 Shell编程之正则表达式、文本处理工具,需要的朋友可以参考下
2022-11-13

如何理解Kubernetes API 编程范式

这篇文章给大家介绍如何理解Kubernetes API 编程范式,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、需求来源首先我们先来看一下 API 编程范式的需求来源。在 Kubernetes 里面, API 编程范
2023-06-04

一文带你理解JavaScript中的函数式编程

函数式编程是一种编程规范,也是一种对语言程序(比如JavaScript)本身能力的运用方式。本篇文章将从编程规范来介绍函数式编程的到底是一种什么样的规范,希望对大家有所帮助
2023-02-20

如何利用golang的函数式编程特性?

go 语言支持函数式编程,通过不可变类型、纯函数、高阶函数和函数式集合操作实现。例如,可以使用不可变的 int 类型,声明纯函数 sum 来计算列表中元素的总和,并使用内置的 for 循环和匿名函数进行迭代和累加。如何利用 Go 的函数式编
如何利用golang的函数式编程特性?
2024-05-01

如何评估golang函数式编程的价值?

go 中函数式编程带来以下好处:提高代码的可测试性,因为纯函数无副作用。增强代码的并行性,因为不可变性允许并发操作数据结构。减少错误,因为函数式编程原则限制了共享或意外修改状态。如何评估 Go 中函数式编程的价值函数式编程是一种编程范例,
如何评估golang函数式编程的价值?
2024-05-01

如何理解JVM调优参数、方法、工具

这篇文章主要介绍“如何理解JVM调优参数、方法、工具”,在日常操作中,相信很多人在如何理解JVM调优参数、方法、工具问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何理解JVM调优参数、方法、工具”的疑惑有所
2023-06-15

“PHP 面向对象编程与函数式编程比较:理解异同点”

本文比较了 PHP 面向对象编程和函数式编程之间的异同点,分析了两种编程范式的特点和应用场景,提供了若干代码示例来说明各自的特点。
“PHP 面向对象编程与函数式编程比较:理解异同点”
2024-02-25

如何利用Win7的“数学输入面板”工具编写数学公式

数学是一门非常重要的学科,而数学公式在很多领域都很有用处,一般人们习惯于js在Word中调用公式编辑器进行输入,但有点繁琐。现在,win7中增加了“数学输入面板”工具,让数学公式的使用变得更为方便、简单。今天,介绍一
2023-05-26

Python中的函数式编程是如何实现的?

Python中的函数式编程是如何实现的?函数式编程(Functional Programming,简称FP)是一种编程范式,重点关注函数的运算和组合。与传统的命令式编程相比,函数式编程更注重函数的返回值,而不是过程或状态的改变。Python
2023-10-25

编程热搜

目录