var data = {
"factors" : [1,2,34]
}
我想使用ramda JavaScript将因子数组中的所有元素乘以2并返回更新的数据对象。
答案 0 :(得分:0)
看起来你的尝试正朝着正确的方向发展。如果您编辑了问题以显示您尝试过的内容,而不是仅将其包含在评论中,这将有所帮助。
当然,有很多方法可以做到这一点。
最简单的可能就是这个,它会对您的2
和factors
进行硬编码:
const {over, lensProp, map, multiply} = R
const multFactors = over(lensProp('factors'), map(multiply(2)))
console.log(multFactors({"factors" : [1,2,34]}))

<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.js"></script>
&#13;
但如果你想要那些传入,那么这样的事情可能会更好:
const {over, lensProp, map, multiply} = R
const multAllBy = (propName, multiplier, data) =>
over(lensProp(propName), map(multiply(multiplier)), data)
console.log(multAllBy('factors', 2, {"factors" : [1,2,34]}))
&#13;
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.js"></script>
&#13;
注意data
的位置:它是函数的最后一个参数,并且仅在调用的最后位置使用。在这种情况下,我们只需删除参数即可创建更接近咖喱的版本。但请注意我们现在必须调用它的方式。如果您重复使用中间功能,这很好。如果没有,这种方法无法获得任何好处。
const {over, lensProp, map, multiply} = R
const multEachBy = (propName, multiplier) => over(
lensProp(propName),
map(multiply(multiplier))
)
console.log(multEachBy('factors', 2)({"factors" : [1,2,34]}))
&#13;
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.js"></script>
&#13;
这些都没有任何意义。如果您正试图获得一个无点解决方案或者一个完全通过Ramda方式完成的方法(也可以通过将curry
包裹在最后两个中的一个来获得),那么这可能会更多根据自己的喜好:
const {over, lensProp, map, multiply, useWith, compose, identity} = R
const multEverythingBy = useWith(over, [lensProp, compose(map, multiply), identity])
console.log(multEverythingBy('factors', 2, {"factors" : [1,2,34]}))
&#13;
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.js"></script>
&#13;