在函数中间注入值
Injecting value in middle of function
如果我想定义一个函数来过滤匹配给定值的集合,我可以这样写:
const { filter, equals} = R
const data = [1, 2, 3, 4, 5]
const filterDataFor = x => filter(equals(x), data);
console.log(filterDataFor(2))
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js"></script>
我想我也可以这样写:
const { filter, equals, __ } = R
const data = [1, 2, 3, 4, 5]
const filterDataFor = filter(equals(__), data)
console.log(filterDataFor(2))
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js"></script>
但显然不是;在第二个例子中,filterDataFor
不是函数。有人可以指出我哪里出错了吗?
你可以做的是在 filter
中放置一个简单的占位符而不是 equals(__)
,然后简单地将它们 compose
与等号放在一起:
const { filter, equals, __, compose } = R
const data = [1, 2, 3, 4, 5]
const filterDataFor = compose(filter(__, data), equals);
console.log(filterDataFor(2))
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js"></script>
由于 compose
从右到左组合函数,当您调用 filterDataFor(2)
时,它将首先计算 equals(2)
然后将应用结果函数而不是占位符,本质上是结果在 filter(equals(2), data)
.
您是否考虑过使用 without
?
Returns a new list without values in the first argument. R.equals is used to determine equality.
without([2], [1, 2, 3, 4, 5]);
//=> [1, 3, 4, 5]
它也适用于多个值:
without([2, 5], [1, 2, 3, 4, 5]);
//=> [1, 3, 4]
Andras Simon 的答案的一个变体是翻转过滤器函数,这样谓词就是第二个参数。
const { filter, equals, flip, compose } = R
const data = [1, 2, 3, 4, 5]
const filterDataFor = compose(flip(filter)(data), equals);
console.log(filterDataFor(2))
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js"></script>
如果我想定义一个函数来过滤匹配给定值的集合,我可以这样写:
const { filter, equals} = R
const data = [1, 2, 3, 4, 5]
const filterDataFor = x => filter(equals(x), data);
console.log(filterDataFor(2))
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js"></script>
我想我也可以这样写:
const { filter, equals, __ } = R
const data = [1, 2, 3, 4, 5]
const filterDataFor = filter(equals(__), data)
console.log(filterDataFor(2))
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js"></script>
但显然不是;在第二个例子中,filterDataFor
不是函数。有人可以指出我哪里出错了吗?
你可以做的是在 filter
中放置一个简单的占位符而不是 equals(__)
,然后简单地将它们 compose
与等号放在一起:
const { filter, equals, __, compose } = R
const data = [1, 2, 3, 4, 5]
const filterDataFor = compose(filter(__, data), equals);
console.log(filterDataFor(2))
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js"></script>
由于 compose
从右到左组合函数,当您调用 filterDataFor(2)
时,它将首先计算 equals(2)
然后将应用结果函数而不是占位符,本质上是结果在 filter(equals(2), data)
.
您是否考虑过使用 without
?
Returns a new list without values in the first argument. R.equals is used to determine equality.
without([2], [1, 2, 3, 4, 5]);
//=> [1, 3, 4, 5]
它也适用于多个值:
without([2, 5], [1, 2, 3, 4, 5]);
//=> [1, 3, 4]
Andras Simon 的答案的一个变体是翻转过滤器函数,这样谓词就是第二个参数。
const { filter, equals, flip, compose } = R
const data = [1, 2, 3, 4, 5]
const filterDataFor = compose(flip(filter)(data), equals);
console.log(filterDataFor(2))
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js"></script>