首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数式编程.函数式javascript .赛跑和部分实现

函数式编程.函数式javascript .赛跑和部分实现
EN

Stack Overflow用户
提问于 2018-02-14 12:26:24
回答 1查看 101关注 0票数 0

我是函数式编程的新手,我正在尝试在javascript中运行和部分实现的想法,以使我的头脑围绕着它们。目前,我正在努力训练如何传递一个过滤器函数。下面是我在教程中看到的一行

代码语言:javascript
复制
var seperate = arr => key => val => arr.filter(obj => obj[key] === val);

假设我想让filter函数成为一个临时参数,这样我就可以通过应用不同的filter函数(例如var isHumanvar isLessThan50等)创建部分实现。

也许我想将其工作的数据集作为部分实现的一个参数传递给var filterMembers(membershipData);,然后我想要进行不同的过滤实现var femaleMembers = filterMembers(isFemaleFilter);,这将是一个array.filter()函数。

怎样才能做到这一点?

编辑:

抱歉,我的提问不太清楚。我希望数组和过滤器是可变的。我希望将函数从部分实现中分离出来。

因此,我可能会创建一个对成员数组工作的部分实现,或者对人口普查数据或其他类似的实现。然后,我想从那些部分实现中组合函数,将不同的过滤器函数传递到在不同数据集中工作的部分实现。

恐怕我不知道如何编写工作代码来演示我的问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-14 13:00:27

您需要部分实现过滤器函数:

代码语言:javascript
复制
const filter = fn => arr =>
    arr.filter(fn)

代码语言:javascript
复制
const members = [
  {name: 'eminem', sex: 'male'},
  {name: 'rihanna', sex: 'female'}
]

const filter = fn => arr =>
  arr.filter(fn)
  
const isFemale = x =>
  x.sex === 'female'
  
const filterFemaleMembers = filter(isFemale)

console.log(filterFemaleMembers(members))

首先将fn传递给filter比将arr传递给filter更好,因为当您组合函数时,它有一个好处:

代码语言:javascript
复制
const members = [
  {name: 'Eminem', sex: 'male'},
  {name: 'Rihanna', sex: 'female', age: 28},
  {name: 'Lana Del Rey', sex: 'female', age: 31}
]

const filter = fn => arr =>
  arr.filter(fn)
  
const compose = f => g => x =>
  f(g(x))
  
const isFemale = x =>
  x.sex === 'female'

const isOlder30 = x =>
  x.age > 30

const isFemaleAndOlder30 = compose
  (filter (isFemale))
  (filter (isOlder30))


console.log(
  isFemaleAndOlder30 (members)
)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48787212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档