Ramda,在子数组中查找值

时间:2019-05-18 08:01:46

标签: ramda.js

我以前的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示例中,没有参数。在这里使用管道也许是错误的?

1 个答案:

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