在JavaScript中使用转换进行优化 - Transducers和Ramda

时间:2017-09-11 15:03:07

标签: javascript functional-programming ramda.js

任何想法如何使用Ramda.js中的transduce使其无需对数据进行中间转换((2x过滤,1x排序))以进行优化。

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)

1 个答案:

答案 0 :(得分:2)

const func = (data, name) =>
    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))