Lodash/FP getOr的工作原理

人气:1,046 发布:2022-10-16 标签: javascript lodash

问题描述

import { getOr } from 'lodash/fp';

我想知道getOr是如何工作的,因为我找不到具体的文档来解释它。

推荐答案

getOr()方法的行为与非功能loDash库中的常规get()方法非常相似:

_.get(object, path, [defaultValue])

以上是get在普通loash中的用法。若要使用它,您需要提供要从中获取值的object,为值提供path,如果对象中不存在路径,则提供可选的defaultValue

如何使用getOr()

以下是_.getOr()的用法:

_.getOr(defaultValue)(path)(object)

_.get()中的_.get()非常相似,上面的函数返回object中的path处的值,如果对象中不存在该路径,则返回defaultValue

您可能已经注意到,您必须提供上述defaultValue才能传递对象和路径参数。如果您确定您的路径将始终通向某个值(并且不需要缺省值),则这就是_.get(path)(object)方法的用途。

用法示例:

数据-lang="js"数据-隐藏="假"数据-控制台="真"数据-巴贝尔="假">
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()的定义包装了常规的lowash_.get()定义,只是它是curry的,参数是翻转的,并且必须提供缺省值(因为如果不提供缺省值,您将无法提供其他curry参数)。使用lowash,您可以实现_.getOr,如下所示:

数据-lang="js"数据-隐藏="真"数据-控制台="真"数据-巴贝尔="假">
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>

870