我具有以下数据结构:
const cluster = {
processes: [
{ color: 'test', x: 0, y: 0 },
...
],
};
现在我想使用以下符号进行功能:
// getProcess :: (Cluster, number) -> Process
getProcess(cluster, 0);
// => { color: 'test', x: 0, y: 0 }
好吧,我尝试使用ramdajs:
const getProcess = R.compose(R.flip(R.nth), R.prop('processes'));
对于getProcess(cluster)(0)
来说很好用,但是对于getProcess(cluster, 0)
来说它返回一个函数。
有没有办法用ramda解决这个问题,或者可能是更正确的实现?
答案 0 :(得分:1)
您可以使用R.uncurryN
来实现这一点,它只需使用您想要取消使用的参数数量以及curried函数即可。
const getProcess = R.uncurryN(2, R.compose(R.flip(R.nth), R.prop('processes')));
这适用于所有咖喱函数,无论是Ramda产生的还是类似下面的函数。
R.uncurryN(2, x => y => x + y)
使用R.useWith
可以简洁地写出另一种方法,尽管我倾向于发现useWith
的用法比其他方法可读性低。
const getProcess = R.useWith(R.nth, [R.identity, R.prop('processes')])
getProcess(0, cluster)
答案 1 :(得分:0)
有时候更直接的方法是可取的。
const getProcess = R.curry(
(pos, entity) => R.path(['processes', pos], entity)
);