Ramda:提取唯一值的平面数组

Ramda: Extract flat array of uniq values

我确实有一个像下面这样的工作代码,但我想知道 Ramda 是否有办法将整个表达式转换为柯里化函数,我可以在其中指定输入数据参数。甚至可能以不同的方式组成整个事物。

const data = [
  { val: ['A', 'B'] },
  { val: ['C', 'D'] },
  { val: ['A', 'C', 'E'] },
]

R.uniq(R.flatten(R.map(R.prop('val'), data)))

我尝试使用 R.__,但它的工作方式可能不同,不适用于此类嵌套调用。

这是您的函数的简单转换,使用 compose:

const {compose, uniq, flatten, map, prop} = R;

const data = [
  { val: ['A', 'B'] },
  { val: ['C', 'D'] },
  { val: ['A', 'C', 'E'] },
]

const extract = compose(uniq, flatten, map(prop('val')))

console.log(extract(data))
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.js"></script>

这也可以用 composepipe:

的 Ramda 的逆序双胞胎来写

const {pipe, uniq, flatten, map, prop} = R;

const data = [
  { val: ['A', 'B'] },
  { val: ['C', 'D'] },
  { val: ['A', 'C', 'E'] },
]

const extract = pipe(
  map(prop('val')),
  flatten, 
  uniq
)

console.log(extract(data))
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.js"></script>

我个人选择 compose 用于单行,pipe 用于更长的时间。

在这两个函数中表达的函数组合的概念是 Ramda 的核心。 (免责声明:我是 Ramda 作者。)