1. ホーム
  2. javascript

[解決済み] lodash / fp getOrの仕組み

2022-02-07 01:09:46

質問事項

import { getOr } from 'lodash/fp';

getOrの仕組みを説明する具体的なドキュメントが見つからなかったので、教えて欲しいです。

どのように解決するのですか?

その getOr() メソッドの動作は、通常の get() メソッドで、機能しないlodashライブラリにあります。

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

上記は get を通常のlodashで使用します。これを使うには object から値を取得したい場合、その path を値に、そしてオプションで defaultValue がオブジェクト内に存在しない場合、そのパスを指定します。

使用方法 getOr() :

の使い方は次のとおりです。 _.getOr() :

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

とよく似ています。 _.get() にある値を返します。 pathobject または 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() は、通常のロダッシュをラップする _.get() の定義に従います。ただし、この定義が curried であること、引数が反転していること、そしてデフォルト値を指定しなければならないことを除きます (デフォルト値を指定しなければ、他の curried 引数を指定することができないからです)。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/[email protected]/lodash.min.js"></script>