我想使用 Ramda 的标准函数集编写一个函数,该函数集给定一个字典和一个键,它将增加键的值。例子
fn('foo', {}) // => {foo: 1}
fn('foo', {foo: 1}) // => {foo: 2}
我已经很接近了,但我错过了一种正确咖喱的方法。
我有一个方法,它接受一个键和一个对象并返回一个:
// count :: Any -> Number
var count = R.compose(R.inc, R.defaultTo(0))
// countProp :: String -> Object -> Number
var countProp = R.curry(R.compose(count, (R.prop(R.__))))
countProp('foo', {foo:1}) // 2
countProp('foo', {}) // 1
现在我想返回一个新的数据结构
// accum :: String -> Object -> Object
var accum = R.curry(function(key, obj){
return R.assoc(key, countProp(key, obj), obj)
})
accum('foo', {foo: 1}) // => {foo: 2}
但问题是,为了使这一点免费,我必须弄清楚如何在函数设置中获取值,以便以正确的顺序进行咖喱。我究竟做错了什么?我应该以不同的方式设置此功能吗?我试图设置它,以便两个依赖函数都首先获取密钥,然后是对象,但我错过了一些东西。我应该为此考虑一个特定的仿函数吗?
谢谢!