这是一个简单的链式表达式,使用现代 javascript 来查找位于字符串中的特定键的值,该字符串包含逗号分隔的键值对列表,由=
.
如果源为空或未找到密钥,这将失败,在我看来,这对于 Maybe monad 来说似乎是一项伟大的任务。
// Grab the tag with key in `tag`
const getTag = (product, tag) =>
product.Tags
.split(',')
.find(t => t.startsWith(`${tag}=`))
.split('=')[1]
getTag({Tags: 'a=y,b=z'}, 'a') // returns 'y'
getTag({Tags: 'a=y,b=z'}, 'z') // returns boom (desired null)
getTag({Tags: null}, 'a') // returns boom (desired null)
所以我 npm 安装了 sanctuary 并开始使用功能解决方案。这是迄今为止我所获得的,并且觉得它很丑陋,这告诉我我一定做错了什么或使用了错误的工具。
const getk = S.map(S.filter(S.test(/=/)))(S.splitOn(','))
S.map(S.map(S.map(S.splitOn('='))))(S.map(getk))(S.toMaybe(null))
// Nothing
S.map(S.map(S.map(S.splitOn('='))))(S.map(getk))(S.toMaybe('a=y,b=z'))
//Just ([["a", "y"], ["b", "z"]])
我不希望这是一个“为我解决这个问题”的问题,但我很难传达我真正需要帮助的地方。
注意我仍在尝试“弄清楚” FP,所以这绝对是一个熟悉的问题。