位置: 编程技术 - 正文

javascript函数式编程程序员的工具集(javascript数学函数)

编辑:rootadmin

推荐整理分享javascript函数式编程程序员的工具集(javascript数学函数),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:javascript函数用法,javascript函数大全,javascript中的函数该如何理解,javascript中的函数该如何理解,javascript中的函数该如何理解,javascript函数写法,javascript 函数,javascript 函数,内容如对您有帮助,希望把文章链接给更多的朋友!

如果你仔细看了到目前为止出现过的示例代码,你会发现这里面的一些方法不太熟悉。 它们是map()、filter()和reduce()函数,它们对任何语言的函数式编程都至关重要。 它们可以让你不必使用循环和语句,写出更简洁的代码。

map()、filter()和reduce()函数组成了函数式程序员工具集的核心部分,这个工具集包括一系列纯的、 高阶的函数,它们是函数式方法的主力。实际上,它们是纯函数和高阶函数的典型,它们以一个函数为输入, 返回一个输出结果,并且不产生副作用。

然而它们是浏览器中ECMAScript 5.1的实现标准,它们只工作于数组。每次调用它们,一个新的数组会被创建并返回, 而原来存在的那个数组不会被改变。它们以函数为输入,经常使用匿名函数作为回调函数。它们遍历数组, 并对数组的每一个元素应用这个函数!

还有一点,它们只作用于数组,无法作用于其它可迭代的数据结构,比如对象。不用担心, 有很多库比如Underscore.js,Lazy.js,stream.js等等都实现了它们自己的更强大的map()、 filter()和reduce()。

回调

如果你以前从来没用过回调,那这个概念可能会让你有些迷惑。尤其是在Javascript中, Javascript给出了好几种声明函数的方式。

回调函数用于传递给另外一个函数供它们使用,这是一种像传递对象一样来传递逻辑的方式:

对于比较简单的任务可以用匿名函数:

回调不仅用于函数式编程,在Javascript中它们能干很多事情。仅作为例子,这有个callback()函数用于jQuery的AJAX调用:

注意这里只用了函数的名字,因为我们并不是要调用函数而是传递函数,写成这样就错了:

如果我们调用了函数会发生什么?在这个例子里,myCallback(xhr)会尝试执行,控制台将打印“undefined”, 并会返回true。当ajax()完成调用时,它根据名字找到的回调函数将是一个"true",然后就报错了。

也就是说我们无法指定给回调函数传什么参数,如果我们的回调函数需要让ajax()函数传给他我们想要的参数, 我们可以把回到函数包在一个匿名函数里:

Array.prototype.map()

map()是这些函数的老大,它简单地对数组里的元素依此应用回调函数。

语法:arr.map(callback [, thisArg]);

参数:&#;callback(): 这个函数为新数组产生一个元素,它接收的参数: &#;currentValue:数组当前遍历到的元素&#;index:数组中当前元素序数&#;array:当前正在处理的数组

&#;thisArg:这是个可选参数,当执行回调的时候它作为回调函数的this

例子:

尽管Array.prototype.map方法是Javascript中数组对象的标准方法,你也可以很容易地扩展自己的对象。

Array.prototype.filter()

filter()函数用于把数组中的一些元素筛选出来。回调函数必须返回真(保留到新数组里)或假(扔掉)。 用map()可以做类似的事情,就是把你像扔掉的元素返回为null,不过filter()函数会在新数组里面删除这些不要的元素, 而不是留个null占着位置。

语法:arr.filter(callback [, thisArg]);

&#;callback():这个函数用来测试数组中的每个元素,要保留返回真,否则返回假。它有这些参数: &#;currentValue:数组当前遍历到的元素&#;index:数组中当前元素的序数&#;array:当前正在处理的数组

&#;thisArg:这是个可选参数,当执行回调的时候它作为回调函数的this

例子:

javascript函数式编程程序员的工具集(javascript数学函数)

Array.prototype.reduce()

reduce()函数,有时也称为fold,它用于把数组中的所有值聚集到一起。回调需要返回组合对象的逻辑。 对于数字来说,它们往往会被加到一起或者乘到一起。对于字符串来说,它们往往是被追加到一起。

语法:arr.reduce(callback [, initialValue]);

参数&#;callback():此函数把两个对象合并成一个对象,并将其返回。参数有: &#;previousValue:上一次回调函数被调用时返回的值,或者是初始值(如果有的话)&#;currentValue:数组当前正在处理的元素&#;index:数组中当前元素的序数&#;array:当前正在处理的数组

&#;initialValue:可选。第一次回调所传入参数的初始值

例子

其它函数

map()、filter()和reduce()函数在我们辅助函数的工具箱里并不孤单。这里还有更多的函数几乎在所有函数式应用里都会被使用。

Array.prototype.forEach

forEach()函数本质上是map()函数的非纯版本,它会遍历整个数组,并对每个元素应用回调。 然而这些回调函数不返回值。它是实现for循环的一个更纯粹的方式。

语法:arr.forEach(callback [, thisArg]);

参数:&#;callback():对数组中每一个元素所应用的。参数有: &#;currentValue:数组中当前正在处理的元素&#;index:数组中当前元素的序数&#;array:正在处理的数组

&#;thisArg:可选。回调函数中作为this的值

例子:

Array.prototype.concat

如果不用for或while处理数组,你会经常需要把数组拼接起来。另一个Javascript内建函数concat就是专门干这事儿的。 concat函数会返回一个新数组但不改变旧数组。它可以把你传入的所有参数拼接到一起。 console.log([1, 2, 3].concat(['a','b','c']) // 拼接两个数组// Output: [1, 2, 3, 'a','b','c']

它返回两个数组拼接成的数组,同时原来的那些数组没有被改变。这就意味着concat函数可以链式调用。

变量x、y、z的值最后都是[1,2,3,4,5,6,7,8,9]。

Array.prototype.reverse

这个Javascript内建函数是用于数组变形的。reverse函数用于将一个数组反转,也就是第个一元素会跑到最后, 而最后一个元素变成了第一个元素。

然而,这个函数并不会返回一个新的数组,而是把原来的数组替换掉了。我们可以做个更好的。下面是一个纯的反转数组函数

Array.prototype.sort

与map()、filter()和reduce()函数相似,排序函数sort()需要传入一个回调函数来定义数组如何排序。 但是,跟reverse()一样,它也会把原来的数组替换。这可不太好。 arr = [, , , 7, ];console.log(arr.sort(function(a,b){return a?b}) );// arr现在是: [7, , , , ];

我们可以写一个纯函数的sort(),但是排序算法的源代码很麻烦。对于特别大的数组,应当根据特定的数据结构来选用适合的算法, 比如快速排序、合并排序、冒泡排序等等。

Array.prototype.every 和 Array.prototype.some

Array.prototype.every() 和 Array.prototype.some() 都是纯的高阶函数,它们是Array对象的方法, 通过回调函数根据数组各元素返回的布尔值(或相当于布尔的值)来进行测试。如果数组中所有的元素通过回调函数计算都返回True, every()函数就返回true;如果数组中有一个元素返回True,some()函数就返回True。

例子:

JavaScript实现上下浮动的窗口效果代码 本文实例讲述了JavaScript实现上下浮动的窗口效果代码。分享给大家供大家参考。具体如下:这里介绍使用JavaScript实现上下浮动的窗口,在垂直方向上漂

关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别 最近在做的在线考试和课程商城都遇到这样的问题:就是鼠标滑过的时候出现一个层,当鼠标滑到当前层的话mouseover和mouseout在低版本的浏览器会出现闪

JS实现新浪微博效果带遮罩层的弹出框代码 本文实例讲述了JS实现新浪微博效果带遮罩层的弹出框代码。分享给大家供大家参考。具体如下:这是一款新浪微博效果的弹出框,现成的JS代码,兼容I

标签: javascript数学函数

本文链接地址:https://www.jiuchutong.com/biancheng/380311.html 转载请保留说明!

上一篇:深入探讨javascript函数式编程(深入探讨换个说法怎么说)

下一篇:JavaScript实现上下浮动的窗口效果代码(javascript第二章上机怎么写)

  • 出口退税免税政策
  • 综合收益总额与什么有关
  • 可转债会计分录利息
  • 小规模纳税人的企业所得税税率
  • 生产型企业直接进口产品是否可直接出口
  • 医院工作服记什么科目
  • 企业股权无偿转让不缴增值税
  • 税率3%的增值税专用发票
  • 什么情况下要做试管怀孕
  • 清理往来账管理办法
  • 负债类会计科目表
  • 银行手续费发票怎么开
  • 结转周转材料成本差异会计分录
  • 公司持有的房产税
  • 餐费可以入成本吗
  • 企业购买银行理财产品如何进行账务处理
  • 增值税的会计核算
  • 小规模纳税人收到专票有什么影响
  • 旧房转让土地增值税计算
  • 企业所得税资产总额怎么算出来的呢
  • 用于职工集体福利的外购货物可以抵进项税额吗
  • 贸易公司未开票收入要报税吗
  • 基本户没开 可以销户吗
  • 客户汇公司账户怎么汇
  • 待认证进项税额借方余额表示什么
  • 小规模纳税人销售额超过500万
  • 上年发生的费用,下年来得发票,会计分录
  • 不附追索权的票据包括
  • 房地产会计工资一般多少
  • win11资源管理器卡死
  • rtvscn95.exe - rtvscn95是什么进程 有什么用
  • 耕地占用补贴标准
  • 逾期未收回包装物押金税率
  • 辞退补偿款怎么算
  • post请求怎么用
  • php 使用 AWS kinesis
  • 购买免税农产品的会计分录
  • 人工智能 深度
  • 小微企业会计制度是什么
  • 小三用英语怎么写?
  • 残疾人就业保障金
  • 小规模如何申报增值税
  • 计提工资扣社保的凭证
  • 增值税贷方余额是负数怎么办
  • 哪些进项税不允许从销项税额中抵扣
  • 政府补助如何确定收入
  • 个体户经营所得税率表
  • 堤围防护费如何计算
  • 进口原料需要交哪些税
  • 小规模纳税人免税政策2022
  • 营业税改增值税有什么好处
  • 公司的现金收入存到个人账户在转到公司指定的私人账户
  • 办公室租金产生的税率
  • 如何开具房屋租赁登记备案证明
  • 房产租赁发票
  • 非现金资产抵偿债务
  • 补发以前年度工资的账务处理
  • 医保卡收到钱
  • 保证金抵扣货款情况说明范文
  • 如果找国外客户
  • 以前年度损益调整属于哪类科目
  • 工会经费按实际发放交还是以计提的
  • 建筑机械使用安全规范最新版
  • sql server 自增列设置语句
  • navicate创建存储过程
  • windows vista X86 RTM/OEM 中文正式版下载地址
  • pptp和l2tp哪个比较安全
  • 联想win8一键还原系统操作步骤
  • 用win7的人多吗
  • linux纯文本浏览器
  • win8怎么进入桌面系统
  • Unity的Attribute(特性)还算多吧
  • JavaScript基础教程
  • 旧房转让土地增值税扣除项目
  • 2021年个税退税条件
  • 宝宝早教一般选什么课程
  • 国税开票系统怎么增行
  • 地方文化包括哪几种
  • 船舶吨税案例分析
  • 税务绩效工作存在的问题
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设