【发布时间】:2022-11-02 07:22:15
【问题描述】:
假设我有一个像下面这样的项目列表,我想用 ramda 将过滤器列表应用到它上面。
const data = [
{id: 1, name: "Andreas"},
{id: 2, name: "Antonio"},
{id: 3, name: "Bernhard"},
{id: 4, name: "Carlos"}
]
没什么大不了的:管道(过滤器(predA),过滤器(predB),...)(数据)
棘手的部分是我想用一个键定义我的过滤器,以跟踪哪些项目已被哪个过滤器过滤掉。
const filterBy = (key, pred) => subs => {
const [res, rej] = partition(pred, subs)
return [{[key]: rej.map(prop('id'))}, res]
}
这一切都在尖叫单子链或传感器,但我无法理解如何将它们组合在一起。
假设我有 2 个谓词:
const isEven = filterBy('id', i => i % 2 === 0)
const startsWithA = filterBy('name', startsWith('A'))
我想得到一个看起来像这个元组的结果,带有一个拒绝图和一个“接受”项目列表(isEven 抛出 1 和 3,startsWithA 拒绝 3 和 4):
[
{
id: [1, 3],
name: [3, 4]
},
[{id: 2, name: "Antonio"}]
]
【问题讨论】:
标签: ramda.js