2017-10-09 98 views
1

Ramda是我的第一個函數式編程庫,現在我比較Sanctuary和Ramda。也許我的一些問題太愚蠢了,但我沒有找到學習聖所的最佳方式。我可以通過對象propery「通過」保護區

我的問題是: 我怎麼能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]} 

是保護區有任務過路費?

回答

1

在這種情況下,只存在一個僅存在保護區的解決方案,但在一般情況下需要鏡頭。

這個特殊的問題可以通過這種方式來解決:

> 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.overR.lensProp之類的值來將變換應用於numbers字段的值。 Sanctuary尚未提供任何用於處理鏡頭的功能。如果您有興趣將這些功能添加到庫中,請考慮對sanctuary-js/sanctuary#177發表評論。