javascript - Ramda:如果属性存在,使用它,如果不存在,检查另一个属性是否存在并使用它
问题描述
我有几个来自不同 API 的调用。都返回不同的数据。因此,有些返回“位置”:“前端开发人员”,有些返回“标题”:“前端开发人员”,有些返回“标题位置”:“前端开发人员”,有些不返回这三个中的任何一个
所以,我想要的是使用 ramda 来获得正确的属性。如果 API 返回位置,则使用位置。如果它返回标题,请使用标题。如果它返回标题位置,则返回它。如果没有像这三个中的任何一个属性,只需使用空字符串。
如何使用 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
推荐阅读
- java - 使用 mySQL 从 Spring Boot 开始时,Javers 给出重复的键名“jv_global_id_owner_id_fk_idx”
- kql - 如何在日期之间创建 kql 查询
- three.js - three.js 失真,glb (gltf) 模型上的颜色替换。蓝色变为绿色,黄色变为橙色
- powershell - 在 dc 调用命令 - 获取 gpinheritance - 不起作用
- regex - 如何从以下 reg 表达式响应中排除最后一个字符
- python - 找出列表中直到特定索引的唯一元素的程序
- ios - 我们可以在专为儿童设计的 iOS 应用中使用 Firebase 吗?
- python - 在定时while循环中输入
- css - 如何在 CSS 中访问 Node JS“主页”或 PUBLIC_URL 值?
- c++ - 为什么从文件中获取输入时我的字符串为空?