我试图使下面的函数成为无意义的。我不知道怎样才能把争论传递给内在的功能。我使用的是Ramda.js,但我认为这个概念比这更普遍。这是我的密码。
search = function(id) {
return find(propEq('id', id), items)
}在这里,您将注意到id参数被传递给内部函数propEq。这是我不确定的部分。
发布于 2015-08-05 10:48:48
这个问题比Ramda更普遍,但是Ramda确实有几个函数可以使类似的事情变得更容易,特别是useWith和converge。
这可以用这样的useWith编写--不带任何点:
var search = useWith(find, propEq('id'), identity);
search(2, items); //=> {id: 2}您可以在行动关于Ramda REPL中看到它。
发布于 2015-08-05 06:08:28
稍加修改,你就可以得到一个没有积分的版本,但是自动运行带来了一些问题,所以我不得不通过手动运行函数来复制一些功能。这是一条班轮:
search = compose(flip(find)(items), propEq('id'))为了简洁起见,使用ES6语法:
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
发布于 2017-06-13 10:00:09
你只需要先做咖喱。然后,您可以首先给它id,条目将是它前面的函数的输出。
例如:
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' }https://stackoverflow.com/questions/31823720
复制相似问题