1

Ramda 是我的第一个函数式编程库,现在我将 Sanctuary 与 Ramda 进行比较。也许我的一些问题太愚蠢了,但我没有找到学习Sanctuary的最佳方法。

我的问题如下:如何map在对象的嵌套属性中排列?

Ramda 代码:

const addOneForNumbers = R.over(R.lensProp('numbers'), R.map(R.add(1)))

addOneForNumbers({ numbers: [1, 2, 3, 4, 5] })
// {"numbers": [2, 3, 4, 5, 6]}

Sanctuary有任务收费吗?

4

1 回答 1

1

在这种情况下,存在仅限 Sanctuary 的解决方案,但在一般情况下需要镜片。

这个特殊问题可以通过这种方式解决:

> S.map(S.map(S.add(1)), {numbers: [1, 2, 3, 4, 5]})
{numbers: [2, 3, 4, 5, 6]}

这取决于{numbers: [1, 2, 3, 4, 5]}成为StrMap (Array Number). 由于字符串映射是函子,我们可以映射字符串映射以访问数组,然后映射数组以访问数字。

如果对象有其他不同类型的字段,它就不是字符串映射。的类型{active: true, numbers: [1, 2, 3, 4, 5]}{ active :: Boolean, numbers :: Array Number },记录类型。记录类型不支持映射,因此我们需要类似R.overandR.lensPropnumbers字段值进行转换。Sanctuary 尚未提供任何使用镜头的功能。如果您有兴趣看到将这些函数添加到库中,请考虑在sanctuary-js/sanctuary#177上发表评论。

于 2017-10-09T11:29:36.340 回答