我有几个来自不同API的调用。全部返回不同的数据。 因此,有些返回“ position”:“ Frontend developer”, 一些“标题”:“前端开发人员”, 一些“标题位置”:“前端开发人员”, 有些不返回这三个中的任何一个
所以,我要使用ramda来获取正确的属性。如果API返回位置,请使用位置。如果返回title,请使用title。如果返回标题位置,则将其返回。如果没有这三个属性,请使用空字符串。
如何使用ramda做到这一点?
我知道R.propOr('','title'),但这仅在该属性存在时使用,否则使用空字符串。我想使用ramda而不是switch case检查三个不同的属性。
答案 0 :(得分:0)
Ramda对此没有内置功能。但是使用一些Ramda函数构建自己并不难。
const firstProp =
( dflt
, names
, obj
, key = find (has (__, obj), names)
) =>
key ? obj[key] : dflt
console.log
( firstProp
( -1
, ['foo', 'bar', 'baz', 'qux']
, {grault: 1, baz: 42, corg: 100, qux: 5}
)
)
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js"></script>
<script>
const {__, find, has} = R;
</script>
当然,如果愿意,我们可以将其包装在curry
中。
但是我们必须问为什么您要为此使用Ramda。请注意,我是Ramda的作者和忠实粉丝。但是我不认为有必要使用它,除非它提供了一些我从核心Javascript中不容易获得的东西。
事实并非如此,因为我们可以像这样轻松地编写
const firstProp =
( dflt
, names
, obj
, key = names.find (n => n in obj)
) =>
key ? obj[key] : dflt