ramda对象中的JavaScript数组属性

时间:2018-02-16 21:00:23

标签: javascript ramda.js

var data = {
   "factors" : [1,2,34]
}

我想使用ramda JavaScript将因子数组中的所有元素乘以2并返回更新的数据对象。

1 个答案:

答案 0 :(得分:0)

看起来你的尝试正朝着正确的方向发展。如果您编辑了问题以显示您尝试过的内容,而不是仅将其包含在评论中,这将有所帮助。

当然,有很多方法可以做到这一点。

最简单的可能就是这个,它会对您的2factors进行硬编码:



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;
&#13;
&#13;

但如果你想要那些传入,那么这样的事情可能会更好:

&#13;
&#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;
&#13;
&#13;

注意data的位置:它是函数的最后一个参数,并且仅在调用的最后位置使用。在这种情况下,我们只需删除参数即可创建更接近咖喱的版本。但请注意我们现在必须调用它的方式。如果您重复使用中间功能,这很好。如果没有,这种方法无法获得任何好处。

&#13;
&#13;
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;
&#13;
&#13;

这些都没有任何意义。如果您正试图获得一个无点解决方案或者一个完全通过Ramda方式完成的方法(也可以通过将curry包裹在最后两个中的一个来获得),那么这可能会更多根据自己的喜好:

&#13;
&#13;
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;
&#13;
&#13;