javascript - 在函数中间注入(inject)值

标签 javascript ramda.js

如果我想定义一个函数来过滤匹配给定值的集合,我可以这样写:

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 它们和 equals :

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)

关于javascript - 在函数中间注入(inject)值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58745131/

相关文章:

javascript - 如何使用 Ramda 从对象中过滤掉特定的键?

javascript - 使用 ramda 更改数组中的对象属性

javascript - 如何在 php 中获取 firebase UserID?

javascript - 设置 javascript google Drive api 的搜索参数

node.js - Ramda 在 Mongoose 查询回调中不起作用

javascript - 有没有办法使用 ramda 将参数传递给 JavaScript 中的谓词?

javascript - $(文档).ready(函数() VS $(函数(){

javascript - JavaScript 中的 bz2

javascript - 替换每个在 jQuery 中不起作用

javascript - 使用 ramda 按变量升序/降序