gpt4 book ai didi

javascript - 我可以通过带有 Sanctuary 的对象属性生成 "over"

转载 作者:行者123 更新时间:2023-11-30 21:05:41 24 4
gpt4 key购买 nike

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

我的问题如下:如何在对象的嵌套属性中映射数组?

它的 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 是否有任务收费?

最佳答案

在这种情况下,存在仅 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.lensPropnumbers 的值应用转换 field 。 Sanctuary 尚未提供任何使用镜头的功能。如果您有兴趣看到这些函数被添加到库中,请考虑对 sanctuary-js/sanctuary#177 发表评论. 🔍

关于javascript - 我可以通过带有 Sanctuary 的对象属性生成 "over",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46642602/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com