【发布时间】:2020-12-01 01:05:51
【问题描述】:
我正在尝试如何使用 Ramda 重写以下 TS 代码:
const uniqueIdentifierRegEx = /.*id.*|.*name.*|.*key.*/i;
const uniqueIdentifierPropTypes = ['string', 'number', 'bigint'];
const findUniqueProp = (obj: any) => Object.keys(obj)
.filter(prop => uniqueIdentifierPropTypes.includes(typeof obj[prop]))
.find(prop => uniqueIdentifierRegEx.test(prop));
我最终得到了这样的东西,但它并没有真正起作用:
const data = {a:1, name: 'name', nameFn: () => {}};
const uniqueIdentifierRegEx = /.*id.*|.*name.*|.*key.*/i;
const uniqueIdentifierPropTypes = ['string', 'number', 'bigint'];
const filterPred = curry((obj, prop_, types) => includes(type(prop(prop_, obj)), types));
const findProd = curry((prop_, regEx) => regEx.test(prop))
const findUniqueProp = (obj, types, regEx) =>
pipe(
keys,
filter(filterPred(types)),
find(findProd(regEx))
)(obj)
findUniqueProp(data, uniqueIdentifierPropTypes, uniqueIdentifierRegEx)
可能,pickBy 可用于过滤掉道具……但我迷路了。请帮助连接点。
【问题讨论】:
标签: javascript typescript functional-programming ramda.js