首页 > 编程语言 >去往js函数式编程(5)

去往js函数式编程(5)

时间:2023-06-01 16:11:17浏览次数:51  
标签:... args door 函数 编程 js filter 去往 const

日志记录

  我们可以写一个高阶函数,它以两个函数作为参数,并允许第一个函数只能执行一次,从那一点开始调用第二个函数。

const onceAndAfter = (f, g) => {
  let toCall = f
  return (...args) => {
    let result = toCall(...args)
    toCall = g
    return result
  }
}

const squeak = (x) => console.log(x, 'squeak!!')
const creak = (x) => console.log(x, 'creak!!')
const makeSound = onceAndAfter(squeak, creak)

makeSound('door') // "door squeak!!"
makeSound('door') // "door creak!!"
makeSound('door') // "door creak!!"
makeSound('door') // "door creak!!"

  从性能上来说,差异可能微不足道。展示这种进一步变化的原因是要表明,通过存储函数,你通常可以以更简单的方式产生结果。在过程式编程中,使用标志来存储状态是一种常见的技术。

逻辑反选函数

  filter 方法给一个方法,我们可以对数组进行过滤,只包括方法为真的元素。如果进行反向过滤,如何处理呢。我们可以编写一个高阶函数,它将接受任何方法,然后对其结果取反。

const notDelinquent = serviceResult.accountsData.filter((v) => v.balance >= 0)
const notDelinquent2 = serviceResult.accountsData.filter(
  (v) => !(v.balance < 0)
)

// 上面是两种等效的写法
const not =
  (fn) =>
  (...args) =>
    !fn(...args)

const isNegativeBalance = (v) => v.balance < 0
const notDelinquent3 = serviceResult.accountsData.filter(not(isNegativeBalance))

// 还有一种解决方案,编写一个新的过滤方法,和filter()相反。
const filterNot = (arr) => (fn) => arr.filter(not(fn))

  这个解决方案与 filter()不完全匹配,但是你可以将它添加到 Array.prototype 中,或者应用一些方法。

  西班牙于排序中代码是这样写的。

const spanishComparison = (a, b) => a.localeCompare(b, 'es')
palabras.sort(spanishComparison)

  如何将许进行排序?编写一个函数,以反转比较函数的结果。将 a,b 换下位置。编写一个 sortDescending 方法,它与 sort 相反工作。const invert =fn =>(...args)=>-fn(...args)

标签:...,args,door,函数,编程,js,filter,去往,const
From: https://www.cnblogs.com/wlxll/p/17449339.html

相关文章

  • 使用vue的简单的纯前端JS验证码实现
    使用vue的简单的纯前端JS验证码实现感觉人不能在SQL里面淹死,得看看别的东西了因为是上班摸鱼偷摸搞的,所以人比较懒,很多东西也懒得修修改改,直接放在一个html文件下了页面如下js的生成图形逻辑是21年毕业的时候百度CV的,出处是找不到了<!DOCTYPEhtml><htmllang="en"><head......
  • js 粘贴定位 滚动到顶部后,固定在头部
    由于css的position:sticky的粘贴定位存在兼容性问题,因为决定使用js来判断盒子的位置,添加固定定位来解决,实例代码如下:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"......
  • 分布式队列编程:模型、实战
    介绍作为一种基础的抽象数据结构,队列被广泛应用在各类编程中。大数据时代对跨进程、跨机器的通讯提出了更高的要求,和以往相比,分布式队列编程的运用几乎已无处不在。但是,这种常见的基础性的事物往往容易被忽视,使用者往往会忽视两点:使用分布式队列的时候,没有意识到它是队列。有具体需......
  • 分布式队列编程优化篇
    前言“分布式队列编程”是一个系列文,之前我们已经发布了《分布式队列编程模型、实战》,主要剖析了分布式队列编程模型的需求来源、定义、结构以及其变化多样性;根据作者在新美大实际工作经验,给出了队列式编程在分布式环境下的一些具体应用。本文将重点阐述工程师运用分布式队列编程构......
  • 常用的js判断简写技巧
    空值合并运算符(??)是一个逻辑运算符,当左侧的操作数为null或者undefined时,返回其右侧操作数,否则返回左侧操作数。function(obj){varb=obj??{}}//等价于=>>function(obj){varb;if(obj===null||obj===undefined){b={}}else......
  • Mysql json数组解析方法
    一、背景在表job_position需要对json数组进行解析,查找json数组对象中的数据 首先想到查找mysql的关于json的函数,这边做个记录。二、解决方案2.1 JSON_EXTRACT(json字段,'$.属性名称')需要了解函数 JSON_EXTRACT(json_doc, path[, path]...)  从json中提取数据,JSON_E......
  • JS垃圾回收——和其他语言一样,JavaScript 的 GC 策略也无法避免一个问题:GC 时,停止响应
    JavaScript内存管理&垃圾回收机制标记清除js中最常用的垃圾回收方式就是标记清除。当变量进入环境时,例如,在函数中声明一个变量,就将这个而变量标记为“进入环境”。从逻辑上讲,永远不能释放进入环境的变量所占用的内存,因为只要执行流进入相应的环境,就可能会用到它们。而当变量离......
  • shader编程经典:分形--科赫曲线
    序言科赫(雪花)曲线是一个经典分形图案,来一起领略下分形之美。本篇内容用到一些基础的内容,例如UV的理解和画线技巧,有需要的话可以参考合集的画圆和画线两篇文章。示例shadertoy代码:#defineT.01voidmainImage(outvec4fragColor,invec2fragCoord){vec2uv=(......
  • JS 树型结构 模糊搜索 匹配到所有的节点,包括所有的父节点
    treeData就是el-tree:data要绑定的数据 :data=treeData treeOptions.data是接口返回的原始树形结构数据//根据关键字过滤后的数据consttreeData=computed(()=>{  if(!options.searchText)returntreeOptions.data;  letmhres=filterNodeMethod(opti......
  • java中函数式编程的一些测试
    目录Java中函数式编程的一些测试树反转数据处理科里化Optional函数组合全部代码Java中函数式编程的一些测试在上一篇文章中,提及了java中的函数式编程,但缺少了一些相关的代码,这里补充一下.注意,本文中的代码并不代表最佳实践,只是提供一种思路,其中有很多代码并没有实......