我可以通过带有 Sanctuary 的对象 属性 制作 "over"
Can I make "over" via object propery with Sanctuary
Ramda 是我的第一个函数式编程库,现在我将 Sanctuary 与 Ramda 进行比较。也许我的一些问题太愚蠢了,但我没有找到最好的学习避难所的方法。
我的问题如下:
如何在对象的嵌套 属性 中 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 解决方案,但在一般情况下需要透镜。
这个特殊问题可以这样解决:
> 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.over
和 R.lensProp
这样的东西来对 numbers
字段的值应用转换。 Sanctuary 尚未提供任何使用镜头的功能。如果您有兴趣看到这些函数被添加到库中,请考虑在 sanctuary-js/sanctuary#177 上发表评论。
Ramda 是我的第一个函数式编程库,现在我将 Sanctuary 与 Ramda 进行比较。也许我的一些问题太愚蠢了,但我没有找到最好的学习避难所的方法。
我的问题如下:
如何在对象的嵌套 属性 中 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 解决方案,但在一般情况下需要透镜。
这个特殊问题可以这样解决:
> 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.over
和 R.lensProp
这样的东西来对 numbers
字段的值应用转换。 Sanctuary 尚未提供任何使用镜头的功能。如果您有兴趣看到这些函数被添加到库中,请考虑在 sanctuary-js/sanctuary#177 上发表评论。