我有几个来自不同API的调用。全部返回不同的数据。所以,一些回归“位置”:“前端开发者”,一些“头衔”:“前端开发者”,一些“头衔位置”:“前端开发者”,有些人不返回这三个中的任何一个
所以,我想要的是使用ramda获得正确的属性。如果API返回位置,请使用位置。如果它返回标题,请使用标题。如果它返回title-position,则返回它。如果没有像这三个中的任何一个属性,只需使用空字符串。
如何使用ramda?
我知道R.propOr('','title'),但只有当该属性存在时才使用它,如果不存在,则使用空字符串。我想使用ramda检查三个不同的属性,而不是使用switch case。
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