javascript - 在 JavaScript 中使用 transduce 进行优化 - Transducers 和 Ramda

标签 javascript functional-programming ramda.js

有什么想法可以使用transduce来自 Ramda.js,使其无需对数据进行中间转换((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)

最佳答案

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))

关于javascript - 在 JavaScript 中使用 transduce 进行优化 - Transducers 和 Ramda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46158814/

相关文章:

javascript - 在 Electron 应用程序中嵌入其他程序

java - 函数可以用作输入或从其他函数返回是什么意思?

javascript - 比较 ramda.js 中的部分对象

ios - RxSwift 过滤器变量数组

javascript - 如何应用向 Ramda 中的每个列表项返回 promise 的函数

javascript - ramda.js:使用特定属性从对象数组中获取一组重复项

javascript - 在 react 中,我如何强制浏览器要求保存密码?

javascript - CSS/JS : Height peculiarity in Chrome

javascript - 如何合并两个嵌套的 javascript 对象?

javascript - 如何使用 JavaScript 将 JSON 中的 PHP 时间戳转换为日期和时间