Ramda:如果存在属性,请使用它;否则,请检查是否存在另一个属性并使用它

时间:2019-02-23 20:53:21

标签: javascript ramda.js

我有几个来自不同API的调用。全部返回不同的数据。 因此,有些返回“ position”:“ Frontend developer”, 一些“标题”:“前端开发人员”, 一些“标题位置”:“前端开发人员”, 有些不返回这三个中的任何一个

所以,我要使用ramda来获取正确的属性。如果API返回位置,请使用位置。如果返回title,请使用title。如果返回标题位置,则将其返回。如果没有这三个属性,请使用空字符串。

如何使用ramda做到这一点?

我知道R.propOr('','title'),但这仅在该属性存在时使用,否则使用空字符串。我想使用ramda而不是switch case检查三个不同的属性。

1 个答案:

答案 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