Ramda: 如果 属性 存在,则使用它,如果不存在,检查是否存在另一个 属性 并使用它
Ramda: if property exists, use it, if not, check if another property exists and use it
我有几个来自不同 API 的电话。所有 return 不同的数据。
所以,一些 return "position": "Frontend developer",
一些 "title": "Frontend developer",
一些 "title-position": "Frontend developer",
有些人 return 没有这三个
所以,我想要的是使用ramda来获取正确的属性。如果 API return 位置,则使用位置。如果是 return 的标题,则使用标题。如果它returns title-position,return它。如果没有这三个中的任何一个属性,就使用空字符串。
如何使用 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
我有几个来自不同 API 的电话。所有 return 不同的数据。 所以,一些 return "position": "Frontend developer", 一些 "title": "Frontend developer", 一些 "title-position": "Frontend developer", 有些人 return 没有这三个
所以,我想要的是使用ramda来获取正确的属性。如果 API return 位置,则使用位置。如果是 return 的标题,则使用标题。如果它returns title-position,return它。如果没有这三个中的任何一个属性,就使用空字符串。
如何使用 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