给出以下代码:
const objs = [
{
name: '1st',
completed: false,
},
{
name: '2nd',
completed: true,
},
{
name: '3rd',
completed: true,
},
]
const transducer = R.pipe(
R.filter(R.propEq('completed', true)),
R.map((obj) => {
return {
label: `${obj.name} (${obj.completed.toString()})`,
}
}),
)
const intoArray = R.into([])
console.log('-- working --')
console.log(transducer(objs))
console.log('-- not working --')
console.log(intoArray(transducer, objs))
使用R.pipe
表单时,我得到了预期的结果(数组中的两个对象都带有名称的标签字段和已插入的完整字段)
然而,使用换能器形式我得到一个空数组。如果我删除R.filter
或R.map
(因此只有一个操作在管道中),我得到的结果是只有管道中的那个项目。但是,我似乎无法将这两种操作结合起来。
我在这里缺少什么?
可以使用包含此代码的代码笔:http://codepen.io/rodeoclash/pen/EWJmMZ?editors=1112
答案 0 :(得分:4)
正如this article所述:
我们需要从pipe =>更改因为性质而构成 换能器。虽然传感器可以直接组成,但是 转换的执行是相反的。这意味着你任何时候 将R.pipe用于数组,你可以使用R.compose作为传感器, 反之亦然。
These articles are也非常有用。还有一个非常酷的工具来检查东西:ramda-debug。
const transducer = R.compose(
R.filter(R.propEq('completed', true)),
R.map((obj) => {
return {
label: `${obj.name} (${obj.completed})`,
}
})
)
中的示例