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);