我正在努力学习功能编程,我有以下功能:
fp = lodash/fp, _ = lodash (not yet optimized)
// Reference functions
const getAttributes = fp.getOr({}, `attributes`)
const toArray = fp.curry(input => _.isArray(input) ? [...input] : input ? [input] : [] )
const getTags = fp.flow(getAttributes(), fp.getOr([], 'tags'), toArray())
// returns ['tag 1', 'Tag 2', ...] or else an empty array.
const lowerString = fp.map( taxonomy => taxonomy ? taxonomy.toLowerCase() : '' )
// Used to normalize the tags to lowercase.
const normalizeTags = fp.flow(getTags(), (d) => {console.log(d); return d}, lowerString())
// My composed function that combines the two
问题在于,console.log()
之间的结果以及lowerString()
错误的原因是getAttributes()
返回的原始对象。
答案 0 :(得分:0)
我认为问题在于您将调用getAttributes
,toArray
,getTags
和lowerString
的结果作为flow
的参数传递功能本身。
const getTags = fp.flow(getAttributes(), fp.getOr([], 'tags'), toArray())
VS
const getTags = fp.flow(getAttributes, fp.getOr([], 'tags'), toArray)
和
const normalizeTags = fp.flow(getTags(), (d) => {console.log(d); return d}, lowerString())
VS
const normalizeTags = fp.flow(getTags, (d) => {console.log(d); return d}, lowerString)