日志记录
我们可以写一个高阶函数,它以两个函数作为参数,并允许第一个函数只能执行一次,从那一点开始调用第二个函数。
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