问题标签 [ramda.js]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
524 浏览

javascript - 以无点风格在 Ramda 中编写无参数函数?

考虑下面的工作代码:

randN是一个函数,它接受一个数字并返回一个 RNG,当被调用时,它将返回一个范围为 [0, N-1] 的随机 int。所以它是特定 RNG 的工厂。

我一直在使用ramda.js并学习函数式编程理论,我的问题是:是否可以randN使用 ramda 以无点风格重写?

例如,我可以写:

这将满足“无点风格”的要求,但无法表现出与以下相同的方式randN:调用badAttempt(10)只返回一个介于 1 和 10 之间的随机数,而不是在调用时生成一个介于 1 和 10 之间的随机数的函数。

我还没有找到使我能够以无点样式进行重写的 ramda 函数组合。我不知道这是否只是我的失败,还是 using 的特殊之处random,它破坏了引用透明度,因此可能与无点样式不兼容。

更新

在与 Denys 讨论后,我自己对解决方案的细微改动:

0 投票
2 回答
1834 浏览

javascript - 使用 ramda.js 中的嵌套字段进行排序

sortBy的文档中,它说我们可以使用 R.prop 按对象的字段对对象进行排序。但是如果我必须按嵌套字段排序,它就不起作用。例如 R.prop('id.number') 不起作用。

工作正常。但是如果我有一个嵌套结构

给我一个空列表。我想有一种我无法弄清楚的使用 R.prop 的正确方法。

0 投票
2 回答
243 浏览

functional-programming - 使用 Ramda 进行函数式编程:你能 curry 一个接受无限数量参数的函数吗

假设我有 3 个数组

我想创建一个咖喱函数,在其中设置第一个参数,指示我想在作为参数传递的数组中添加哪个单元格......理想情况下,我希望该函数能够获取无限数量的数组......

例如: mycurriedfunction(1)这意味着我想访问我传入的数组的单元格 1 处的值并将它们加在一起。

因此这样做:

mycurriedfunction(1)(first) 将返回 1

mycurriedfunction(1)(first)(second)将返回 2

mycurriedfunction(2)(first)(second)(third)将返回 6

这甚至可能吗?

如果不是,那么有哪些替代方案可以实现相似甚至相同的结果?

0 投票
3 回答
727 浏览

javascript - 函数式编程:属性总和

我正在尝试使用 Ramda在 JS 中实现一个函数,该函数采用对象列表并返回特定属性的总和。例如

原则上,我需要这样的函数:

在函数式编程中实现这样的东西的最优雅的方法是什么?R.map(R.props)由于明显的原因不起作用。我尝试使用R.composeor的一些组合,R.pipe但我没有运气

0 投票
1 回答
108 浏览

javascript - 如何在 Ramda.js / lodash 中使这段代码更具“函数式编程”风格

我有这段代码:

我觉得有一种方法可以改进这段代码,让它只有一行。我尝试了许多不同的方法,但我是新手ramda.js,我可能会缺少一些功能,这会使这变得更容易和更简单。

0 投票
1 回答
672 浏览

javascript - 如果不匹配,则 Ramda 过滤器

我想过滤所有不符合条件的元素。我能够让它工作:

但我觉得必须有一个更简单的方法:)

0 投票
1 回答
1124 浏览

javascript - 在 ramda.js 中合并两个属性

我想知道是否有更好的方法来做到这一点:

所以基本上,我试图通过将两个属性组合在一起来获得全名。这行得通,但我想知道是否有更好(更短)的方法来做到这一点Ramda?我浏览了文档,但是有些功能我还不太了解其用法。所以这就是我在这里问的原因.. :)

小提琴: https ://jsbin.com/jidiwejatu/edit?js,console

- - - - - - - - - - 编辑 - - - - - - - - -

这是一个相当简单的例子,但是如果我必须合并来自不同路径的属性,我认为这会变得更加复杂,因为我必须使用它R.path来获取每个属性。我对吗?

0 投票
3 回答
5076 浏览

javascript - 无法在 Ramda.js 中“提升”我的头

查看 Ramda.js 的源代码,特别是“lift”函数。

电梯

电梯N

这是给定的示例:

所以结果的第一个数字很简单,a, b, 和c, 都是每个数组的第一个元素。第二个对我来说并不容易理解。参数是每个数组的第二个值(2、2、未定义)还是第一个数组的第二个值和第二个和第三个数组的第一个值?

即使不考虑这里发生的事情的顺序,我也没有真正看到价值。如果我在没有lift先执行它的情况下执行它,我最终会concat得到作为字符串生成的数组。这似乎有点像flatMap,但我似乎无法遵循它背后的逻辑。

0 投票
3 回答
12568 浏览

javascript - 如何访问 Ramda.map 中的迭代索引

我曾经写过类似的东西

与lodash。通常我不需要index,但有时它很有用。

我现在正在迁移到 Ramda:

indexundefined。当然,我可以index在上层范围内创建变量并每次在map正文中递增它,但从 Ramda 所代表的 FP 的角度来看,这有点错误。那么是否有任何构建方式来获取迭代索引?

0 投票
1 回答
302 浏览

ramda.js - 累加器在 R.pipe 中对 R.reduce 的 2 次连续调用之间未重置

考虑到这段代码,使用 Ramda 0.21.0:

为什么第二次调用foodisplay{ a: 2, b: 3, c: 4, d: 5 }而不是{ c: 4, d: 5 }

是否正在进行某种记忆?我希望每次应用 foo 时acc都会重置初始值。{}