Ramda,在子数组中查找值
Ramda, find value in sub array
我之前的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
的示例中,没有参数。在这里使用管道可能是错误的?
您应该获取 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 return 调用时是一个函数。当您调用 getQuantity('area')
时,R.pipe 将 return 一个函数。该函数需要一个对象来操作:
const getQuantityForArea = getQuantity('area');
const quantity = getQuantityForArea(obj);
您可以通过组合两个调用一步调用它:
const quantity = getQuantity('area')(obj);
我之前的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
的示例中,没有参数。在这里使用管道可能是错误的?
您应该获取 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 return 调用时是一个函数。当您调用 getQuantity('area')
时,R.pipe 将 return 一个函数。该函数需要一个对象来操作:
const getQuantityForArea = getQuantity('area');
const quantity = getQuantityForArea(obj);
您可以通过组合两个调用一步调用它:
const quantity = getQuantity('area')(obj);