[Ramada] Build a Functional Pipeline with Ramda.js
We'll learn how to take advantage of Ramda's automatic function currying and data-last argument order to combine a series of pure functions into a left-to-right composition, or pipeline, with Ramda's pipe function.
A simple example will take 'teams' array and output the best score team's name. We use 'R.sort', 'R.head' and 'R.prop' to get job done:
const teams = [ {name: 'Lions', score: 5}, {name: 'Tigers', score: 4}, {name: 'Bears', score: 6}, {name: 'Monkeys', score: 2}, ]; const getTopName = function(teams){ const sorted = R.sort( (a,b) => b.score > a.score, teams); const bestTeam = R.head(sorted); const name = R.prop('name', bestTeam); return name; } const result = getTopName(teams) console.log(result)
One thing in Ramda which is really cool that, for example, 'R.sort' takes two arguements, if you don't passin the second arguement which is 'teams', it will then return a function, so that it enable you currying function and take second arguement as param.
const teams = [ {name: 'Lions', score: 5}, {name: 'Tigers', score: 4}, {name: 'Bears', score: 6}, {name: 'Monkeys', score: 2}, ]; const getBestTeam = R.sort( (a,b) => b.score > a.score); const getTeamName = R.prop('name'); const getTopName = function(teams){ const sorted = getBestTeam(teams); const bestTeam = R.head(sorted); const name = getTeamName(bestTeam); return name; } const result = getTopName(teams) console.log(result)
We will still get the same result.
Use 'R.pipe' to chain function together
In functional programming or lodash (_.chain), we get used to write chain methods, in Ramda, we can use R.pipe():
const teams = [ {name: 'Lions', score: 5}, {name: 'Tigers', score: 4}, {name: 'Bears', score: 6}, {name: 'Monkeys', score: 2}, ]; const getBestTeam = R.sort( (a,b) => b.score > a.score); const getTeamName = R.prop('name'); const getTopName = R.pipe( getBestTeam, R.head, getTeamName ); /* const getTopName = function(teams){ const sorted = getBestTeam(teams); const bestTeam = R.head(sorted); const name = getTeamName(bestTeam); return name; }*/ const result = getTopName(teams) console.log(result)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2015-08-24 [rxjs] Throttled Buffering in RxJS (debounce)
2015-08-24 [rxjs] Demystifying Cold and Hot Observables in RxJS
2015-08-24 [rxjs] Shares a single subscription -- publish()