【发布时间】:2015-10-20 11:32:42
【问题描述】:
我正在学习Ramda,我有点困惑如何使用Ramda 在下面构建这个lodash 链。 Ramda 返回其操作的函数而不是实际值,这似乎是函数式编程的重点,但是在此示例中,我有第二个参数 localRegex 不是主要参数。如果不包装 Ramda 函数并使用 .apply() 或 .call() 将包装的函数参数传播到 Ramda 函数,似乎不可能完全复制它,这似乎更复杂使用lodash。
var _ = require("lodash")
var R = require("ramda")
var localRegex = /^.\.\/|^.\/|^\//
function getRecursiveDeps(deps, localRegex){
return _.chain(deps)
.map(function(dep){
return dep.source.value
})
.filter(function(dep){
return dep.match(localRegex)
})
.value()
}
var items = [
{
"source": {
"value": "./foo"
}
},
{
"source": {
"value": "bar"
}
}
]
console.log(getRecursiveDeps(items, localRegex))
这是我所拥有的,但它不起作用。
var getRecursiveDeps = R.chain(
R.map(function(dependency){
return dependency.source.value
}),
R.filter(function(value){
return value.match(localRegex)
})
)
有没有办法让Ramda 使用主变量进行链接并向下传递localRegex?有没有办法在Ramda 中复制使用lodash 的getRecursiveDeps?
关于Ramda 的功能性以及underscore 和lodash 的功能性有很多讨论。但在这种情况下,getRecursiveDeps 是一个从lodash 返回值的函数。当你从lodash 或underscore 创建这样的函数时,结果是一样的,在包装它时还有更多的工作,在这种情况下,使用Ramda 而不是Lodash 会有什么好处?
【问题讨论】:
标签: javascript dictionary functional-programming lodash ramda.js