Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 以无点方式使用Ramda映射帮助器_Javascript_Functional Programming_Ramda.js_Pointfree - Fatal编程技术网

Javascript 以无点方式使用Ramda映射帮助器

Javascript 以无点方式使用Ramda映射帮助器,javascript,functional-programming,ramda.js,pointfree,Javascript,Functional Programming,Ramda.js,Pointfree,如何更改此代码: map(user => assoc('isAdult', isAdult(user), user) 要实现无点功能(使用Ramda)。我在考虑如何使用它,但找不到有效的实现 有什么想法吗 import { pipe, prop, gte, __, map, assoc, sortWith, descend } from 'ramda' const isAdult = pipe( prop('age'), gte(__, 18) ) const func =

如何更改此代码:

 map(user => assoc('isAdult', isAdult(user), user)
要实现无点功能(使用Ramda)。我在考虑如何使用它,但找不到有效的实现

有什么想法吗

import { pipe, prop, gte, __, map, assoc, sortWith, descend } from 'ramda'

const isAdult = pipe(
  prop('age'),
  gte(__, 18)
)

const func = pipe(
  map(user => assoc('isAdult', isAdult(user), user)),
  sortWith([
    descend(prop('isAdult')),
    descend(prop('age')),
  ])
)

export default func
编辑(更多信息):

我想创建一个函数,返回由
isAdult
键扩展的对象数组。如果用户超过18岁,我们将标志设置为
true

此外,该函数应返回按标志
isAdult
排序的用户,然后按键
age
排序的用户

样本数据:

const data1 = [
  {
    name: 'Cassidy David',
    email: 'sit@Nullaeuneque.co.uk',
    id: 'FC92BF1E-A6FD-E5C1-88AB-183BD1BC59C5',
    position: 1,
    age: 53,
    created_at: '2017-04-07'
  },
  {
    name: 'Gwendolyn Edwards',
    email: 'ut.mi.Duis@elementumsemvitae.net',
    id: '00000001-ED9D-3A88-0D3C-07A148FD43ED',
    position: 2,
    age: 10,
    created_at: '2016-05-21'
  },

好吧,我得到了一个解决方案,尽管这是否比您已经拥有的更清晰,这是一个相当有争议的问题:

const newFields = map(pipe(isAdult, objOf('isAdult')))(data1)
zipWith(merge, data1, newFields)
所以我要做一个额外的步骤,生成一个列表,其中的对象只有一个新的键,并将它们合并在一起,然后合并这些列表

我无法得到一个解决方案,在不避免箭头函数的情况下进行一次传递


编辑:斯科特·索耶(Scott Sauyet)的解决方案很好地解决了这个问题,实际上

我认为试图让这一点自由化是否有用值得商榷

这是相当可读的,因为:

map(user => assoc('isAdult', isAdult(user), user)),
无点是一种伟大的技术,有时可以提高可读性。但如果没有,我也不会为此烦恼

这就是说,如果你真的想尝试点免费,可能是最有帮助的。注意链是如何为函数工作的:
chain(f,g)(x)/=>f(g(x),x)

所以你可以把你的相关部分写成

map(chain(assoc('isAdult'), isAdult))

你可以在

上看到这一点。你能用一个例子或其他东西再解释一下你想要达到的结果吗?代码中不清楚您期望的是什么output@MarioF当然,我刚刚更新了我的问题。很酷的解决方案!文档使得很难理解
chain
是否只做了他的工作,第二个例子应该可以说明这一点。但如果不是这样的话,将函数看作链,在当前的
chainm=>(a->mb)->ma->mb
签名中,我们可以将
r
到某物的函数看作我们的链,并将所有
mx
替换为
(r->x)
给予
(a->(r->b)->(r->a)->(r->b)
,关联性会将其转换为
(a->r->b)->(r->a)->(r->b)
。因此,对于
x::r
g::x->a
我们得到
f::a->r->b
,而
链只能满足于
链(f,g)=x->f(g,x).
非常感谢@ScottSauyet!@ScottSauyet这是一个很好的读卡器monad应用程序。您切换
chain
的参数有什么特别的原因吗?通常我喜欢编写
chain(unaryF)(x=>chain(unaryF)(y=>of(…)
@ftor:不太清楚你在问什么。也许和相关。