函数中间的注入值

问题描述 投票:1回答:2

如果我想定义一个函数,该函数可以过滤与给定值匹配的集合,则可以编写:

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不是函数。有人可以指出我要怎么做吗?

javascript ramda.js
2个回答
3
投票

您可以做的是在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)


0
投票

您是否考虑过使用without

返回第一个参数中没有值的新列表。 R.equals用于确定相等。

without

它也适用于多个值:

without([2], [1, 2, 3, 4, 5]);
//=> [1, 3, 4, 5]
© www.soinside.com 2019 - 2024. All rights reserved.