我无法让 Brunno 提供的 javascript 示例工作,尽管代码清楚地说明了无点的想法(即没有参数)。所以我用ramda.js再举一个例子。
假设我需要找出一个句子中最长的单词,给定一个字符串"Lorem ipsum dolor sit amet consectetur adipiscing elit",我需要输出类似{ word: 'consectetur', length: 11 }的东西
如果我使用纯 JS 样式代码,我将使用 map 和 reduce 函数编写这样的代码
let str = 'Lorem ipsum dolor sit amet consectetur adipiscing elit'
let strArray = str.split(' ').map((item) => ({ word: item, length: item.length }))
let longest = strArray.reduce(
(max, cur) => (cur.length > max.length ? cur : max),
strArray[0])
console.log(longest)
对于 ramda,我仍然使用 map 和 reduce,但我会像这样编写代码
const R = require('ramda')
let longest = R.pipe(
R.split(' '),
R.map((item) => ({ word: item, length: item.length })),
R.reduce((max, cur) => (max.length > cur.length ? max : cur), { length: 0 })
)
let tmp = longest(str)
console.log(tmp)
我会争辩说,我的 ramda 代码的要点是将我的函数链接在一起的管道,它使我的目的更加清晰。不需要创建一个临时变量strArray 是一个奖励(如果我在管道中有超过 3 个步骤,那么它将成为一个真正的奖励)。