码迷,mamicode.com
首页 > Web开发 > 详细

[Ramada] Build a Functional Pipeline with Ramda.js

时间:2016-08-24 06:38:50      阅读:305      评论:0      收藏:0      [点我收藏+]

标签:

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)

 

[Ramada] Build a Functional Pipeline with Ramda.js

标签:

原文地址:http://www.cnblogs.com/Answer1215/p/5801424.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!