在 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))
如何通过管道传输多个数据数组?最终我想实现这样的目标:
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
之后可以添加额外的键和 assocmap(
pipe(
repeat(__, 2),
zipObj(['data', 'id']),
evolve({
data: multiply(100)
})
)
)(range(1, 1000))