javascript - lodash / fp getOr 的工作原理
问题描述
import { getOr } from 'lodash/fp';
我想知道 getOr 是如何工作的,因为我找不到具体的文档来解释它。
解决方案
该方法的行为方式与非功能性 lodash 库中的常规get()getOr()
方法非常相似:
_.get(object, path, [defaultValue])
以上是get
常规lodash中的用法。要使用它,您需要提供object
要从中获取值的 、到值,如果对象中不存在路径,则需要提供path
可选值。defaultValue
如何使用getOr()
:
以下是 的用法_.getOr()
:
_.getOr(defaultValue)(path)(object)
与常规 lodash非常相似_.get()
,上面返回位于path
in的值object
,或者defaultValue
如果路径不存在于对象中。
您可能已经注意到,您必须提供defaultValue
上述内容才能传递对象和路径参数。如果您确定您的路径将始终导致一个值(并且不需要默认值),那么这就是该_.get(path)(object)
方法的用途。
示例用法:
const {getOr} = _;
const object = {'a': [{ 'b': { 'c': 3 } }]};
console.log(getOr("default")("a[0].b.c")(object)); // 3
console.log(getOr("default")(['a', '0', 'b', 'c'])(object)); // 3
console.log(getOr("default")("a.b.c")(object)); // "default"
<script src="https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js+lodash.fp.min.js)"></script>
这个怎么运作:
的定义_.getOr()
包装了常规的 lodash_.get()
定义,除了它是柯里化的,参数被翻转,并且必须提供默认值(因为如果你没有提供默认值,你将无法提供其他柯里化参数价值)。使用 lodash,您可以_.getOr
像这样实现自己:
const {get, rearg, ary, curry} = _; // normal get method
const getOr = curry(rearg(ary(get), [2, 1, 0]));
const object = {'a': [{ 'b': { 'c': 3 } }]};
console.log(getOr("default")("a[0].b.c")(object)); // 3
console.log(getOr("default")(['a', '0', 'b', 'c'])(object)); // 3
console.log(getOr("default")("a.b.c")(object)); // "default"
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.20/lodash.min.js"></script>
推荐阅读
- java - 如何将字符串中写入的条件转换为 Java“if”条件
- entity-framework - 如何加载几个相关的实体,但不包括他的所有字段,包括?
- curl - curl 命令行 POST 对象数组
- algebra - 如果我有 N 个节点,如何找到八叉树中的级别数量?
- java - 使用纯 Java 模拟 JavaFX 的 ColorAdjust 亮度
- java - 如何通过检索上传到 Firebase 数据库或存储的 Image、TextViews 来设置活动的 ImageView、TextViews?
- asp.net-core - 我的 ASP.NET Core 站点始终路由到默认控制器和操作。这可能是服务器配置问题吗?
- angular - 如何使用 Electron 和 Angular 连接 NamedPipe
- c# - 将 JSON 字符串反序列化为 2 种对象类型中的 1 种的更有效方法
- azure-active-directory - 为什么 SAML 请求不包含任何凭据?