首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Ramda.js的函数的无点版本

使用Ramda.js的函数的无点版本
EN

Stack Overflow用户
提问于 2015-08-05 04:55:28
回答 3查看 621关注 0票数 4

我试图使下面的函数成为无意义的。我不知道怎样才能把争论传递给内在的功能。我使用的是Ramda.js,但我认为这个概念比这更普遍。这是我的密码。

代码语言:javascript
复制
search = function(id) {
  return find(propEq('id', id), items)
}

在这里,您将注意到id参数被传递给内部函数propEq。这是我不确定的部分。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-08-05 10:48:48

这个问题比Ramda更普遍,但是Ramda确实有几个函数可以使类似的事情变得更容易,特别是useWithconverge

这可以用这样的useWith编写--不带任何点:

代码语言:javascript
复制
var search = useWith(find, propEq('id'), identity);
search(2, items); //=> {id:  2}

您可以在行动关于Ramda REPL中看到它。

票数 9
EN

Stack Overflow用户

发布于 2015-08-05 06:08:28

稍加修改,你就可以得到一个没有积分的版本,但是自动运行带来了一些问题,所以我不得不通过手动运行函数来复制一些功能。这是一条班轮:

代码语言:javascript
复制
search = compose(flip(find)(items), propEq('id'))

为了简洁起见,使用ES6语法:

代码语言:javascript
复制
var {compose} = R

var find = f => xs => R.find(f, xs)
var propEq = p => x => R.propEq(p, x)
var flip = f => a => b => f(b)(a)

// Example:

var items = [{id: 1}, {id: 2}, {id: 3}]

// point-full
var search = function(id) {
  return find(propEq('id')(id))(items)
}

console.log(search(2))

// point-free
search = compose(flip(find)(items), propEq('id'))

console.log(search(2))

不过,这是没有意义的。

演示: http://jsbin.com/batedi/edit?js,output

票数 4
EN

Stack Overflow用户

发布于 2017-06-13 10:00:09

你只需要先做咖喱。然后,您可以首先给它id,条目将是它前面的函数的输出。

例如:

代码语言:javascript
复制
const search = R.curry((id, items) => R.find(R.propEq('id', id), items));

const testSearch = R.pipe(
  R.identity(() => [{id: '123'}, {id: 'asdf'}]),
  search('123')
);

testSearch(); // { id: '123' }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31823720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档