如果我想定义一个函数,该函数可以过滤与给定值匹配的集合,则可以编写:
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
不是函数。有人可以指出我要怎么做吗?
您可以做的是在equals(__)
内放置一个简单的占位符,而不是filter
,然后简单地将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
?
返回第一个参数中没有值的新列表。 R.equals用于确定相等。
without
它也适用于多个值:
without([2], [1, 2, 3, 4, 5]);
//=> [1, 3, 4, 5]