【发布时间】:2017-08-09 23:27:44
【问题描述】:
我正在尝试将一个函数传递给一个过滤器,该过滤器本身嵌套在更深的函数中
从概念上讲,类似这样的(损坏的)示例:
const testData = [
{foo: "foo", bar: ""}
];
const myFilter = a => !R.isEmpty(a);
const clean = R.when(
R.either(R.is(Array), R.is(Object)),
R.pipe(
R.map(a => clean(R.__)(a)),
R.filter(R.__)
)
)
const cleanEmpties = clean(myFilter);
cleanEmpties(testData); //fail: should not include `bar`, but it does
这样做的正确方法是什么?
为了说明这一点,这个硬编码的替代方案确实可以按预期工作:
const cleanEmpties = R.when(
R.either(R.is(Array), R.is(Object)),
R.pipe(
R.map(a => cleanEmpties(a)),
R.filter(myFilter)
)
)
cleanEmpties(testData); //working, does not include `bar`
【问题讨论】:
标签: javascript ramda.js