在JavaScript中使用transduce进行优化-传感器和Ramda

在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(

我如何使用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(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))同意。转换器允许您对单个元素进行组合操作,但排序操作在更大的数据结构上进行。这并不是说您可以先对第一个元素排序,然后再对第二个元素排序,依此类推。