在JavaScript中使用transduce进行优化-传感器和Ramda
我如何使用Ramda.js使其在没有中间数据转换的情况下工作((2倍过滤,1倍排序))进行优化在JavaScript中使用transduce进行优化-传感器和Ramda,javascript,functional-programming,ramda.js,Javascript,Functional Programming,Ramda.js,我如何使用Ramda.js使其在没有中间数据转换的情况下工作((2倍过滤,1倍排序))进行优化 import { curry, tap, pipe, filter, propEq, sortBy, prop } from 'ramda' //const debugLog = curry((prefix, data) => console.log('@', prefix, data)) const func = (data, name) => pipe( //tap(
import { curry, tap, pipe, filter, propEq, sortBy, prop } from 'ramda'
//const debugLog = curry((prefix, data) => console.log('@', prefix, data))
const func = (data, name) =>
pipe(
//tap(debugLog('pipe')),
prop('tasks'),
//tap(debugLog('prop')),
filter(propEq('username', name)),
filter(propEq('complete', false)),
sortBy(prop('dueDate'))
)(data)
export default func
现在我发现了类似的东西,但在将其实现到我的解决方案中时仍然存在问题
var numbers = R.range(0, 1000000)
var transducer = R.pipe(
R.map(R.add(1)),
R.map(R.multiply(2)),
R.filter(x => x % 2 === 0)
)
R.transduce(transducer, R.add, [], numbers)
const func=(数据,名称)=>
R.sortBy(R.prop('dueDate')、R.transduce(R.compose(
R.filter(R.propEq('username',name)),
R.filter(R.propEq('complete',false))
),R.flip(R.append),[],data.tasks))
我不认为sortBy可以用于转换器(文档倾向于添加“如果在列表位置给出转换器,则充当转换器”。对于可以使用的函数),否则,删除两个谓词过滤器之间的中间数据结构的最简单方法就是将->过滤器(两者)组合起来(propEq('username',name),propEq('complete',false))同意。转换器允许您对单个元素进行组合操作,但排序操作在更大的数据结构上进行。这并不是说您可以先对第一个元素排序,然后再对第二个元素排序,依此类推。