我以前的javascript下划线功能:
export const getQuantity = (obj, name: string) => {
const quantityInIfcObject = _.findWhere(obj.quantities, { name: quantity });
return quantityInIfcObject ? quantityInIfcObject.value : null;
};
const quantity = getQuantity(obj, 'area');
Ramda版本的外观如何?
尝试过:
export const getQuantity = (name) => R.pipe(
R.map((o: IIfcObject) => o.quantities),
R.find(R.propEq('name', name)),
R.map((q: IIfcQuantity) => q.value)
)(quantity);
const quantity = getQuantity(obj, 'area');
不起作用。在我读过的pipe
示例中,没有参数。在这里使用管道也许是错误的?
答案 0 :(得分:2)
您应该获取quantities
(R.prop),找到名称,然后获取value
(如果存在),或者获取null
(如果不存在)
export const getQuantity = (name) => R.pipe(
R.prop('quantities'),
R.find(R.propEq('name', name)),
R.propOr(null, 'value'),
)(quantity);
调用函数是一个两步过程,因为R.pipe在被调用时会返回一个函数。当您调用getQuantity('area')
时,R.pipe将返回一个函数。该函数希望对象可以在以下对象上进行操作:
const getQuantityForArea = getQuantity('area');
const quantity = getQuantityForArea(obj);
您可以通过合并两个调用来一步调用它:
const quantity = getQuantity('area')(obj);