在 ramda 中处理多个数据

Pipe on multiple data in ramda

如何通过管道传输多个数据数组?最终我想实现这样的目标:

const data = [{id: 1, data:100}, {id: 2, data: 200}, {id: 3, data: 3000}, ... ]

我试过了,但没用:

pipe(
  map(assoc('data', __, {})),
  map(assoc('id', multiply(100, prop('data', __))))
)(range(1, 1000))

如果方法是使用两个管道,则必须有某种方法可以同时通过两个不同的数组进行管道传输。如何实施?

我建议这样做:

R.map(n => ({id: n, data: 100 * n}), R.range(1, 1000))

有point-free解决方案,但不够优雅:

R.map(R.converge(R.merge,
                 [R.objOf('id'),
                  R.compose(R.objOf('data'), R.multiply(100))]),
      R.range(1, 10))

这是我能想到的最好的 pointfree 风格,有点老套,因为重复的数字应该与 zipObj 的密钥数量相匹配。在 evolve

之后可以添加额外的键和 assoc
map(
  pipe(
    repeat(__, 2),
    zipObj(['data', 'id']),
    evolve({
      data: multiply(100)
    })
  )
)(range(1, 1000))