【发布时间】:2020-10-03 05:40:21
【问题描述】:
我正在为一点点 ramda 逻辑而苦苦挣扎,我觉得我几乎掌握了它,但我的大脑今天无法正常工作。
我有一个对象:
const thing = {
'name': 'thing',
'value': 1000.0987654321,
'valueAsString': "1000.0987654321",
'otherThings': { 'blah': 'blah' },
}
我想从事物中提取“名称”和“值”,但我想在返回新对象之前对值进行四舍五入。
我知道要提取名称和值,我可以使用 pick:R.pick(['name', 'value']) 并执行舍入函数,我可以采用现有的舍入函数:
const roundTo9Dp = (n) => Number((n).toFixed(9))
并将其应用于我的对象,如下所示:R.compose(roundTo9Dp, R.prop('value'))
这两个操作独立工作:
const picker = R.pick(['name', 'value'])
picker(thing) // => {"name": "thing", "value": 1000.0987654321}
const rounded = R.compose(roundTo9Dp, R.prop('value'))
rounded(thing) // => 1000.098765432
当我加入他们时,我正在挣扎。就好像他们在不同层次上操作“事物”,而我只是在努力解开它们。
R.compose(picker, R.assoc('value', rounded))(thing) // Incorrect
picker(R.compose(R.assoc('value'), rounded)(thing)(thing)) // works, but is hideous
【问题讨论】:
标签: javascript functional-programming ramda.js