【发布时间】:2019-07-10 18:54:15
【问题描述】:
假设我有这两个过滤器:
const getNamesStartingWith = (letter) => persons => {
return persons.filter(person => person.name.startsWith(letter);
}
const getPersonsStartingWithZipCode = (zipCode) => persons => {
return persons.filter(person => person.address.zipCode.startsWith(zipCode);
}
我想做一个通用的管道过滤器。
const pipeFilter = (funcArr, args) => arr => {
...
}
funcArr 是要运行的函数的数组。 args 是一个双精度数组,其中索引是函数的参数。
所以对于我的示例函数,它将是:
const pipeFilter = ([getNamesStartingWith, getPersonsStartingWithZipCode], [['J'], [4]]) => persons => {..}
getNamesStartingWith 的参数是J。 getPersonsStartingWithZipCode 的参数是 4
如果我要“手动”,我会这样做:
export const doPipeFiltering = (funcArr: any[], args: any[]) => (arr) => {
return funcArr.reduce((acc, func, index) => {
let filterdArr;
if (index === 0) {
filterdArr = func(...args[index])(arr);
} else {
filterdArr = func(...args[index])(acc);
}
acc = filterdArr;
return acc;
}, []);
};
有效。但我想在 RamdaJs 中做这件事,这样我就可以在那里使用所有简洁的功能。
我没有找到如何在 Ramda 中为不同的过滤器函数应用参数。有可能吗?
【问题讨论】:
标签: ramda.js