2020
10/26

【lodash】_.cloneDeepWithでできることいろいろ

lodashcloneDeepWithはコールバックを適用してオブジェクト/配列をディープコピーするという関数ですが、ディープコピーの際に「オブジェクト/配列の全要素にアクセスする」という特性を利用して抽出や加工を行うことができます。

階層が固定の場合はネイティブでもfilterやmap、findなど有用な関数がありますが、階層が不定の場合は自前で再帰関数を書くなどちょっとややこしくなります。そういった場合にcloneDeepWithを使えば手っ取り早くオブジェクト/配列の操作を行うことができます。

ADs

例えば

以下のようなオブジェクトがあったとして

いくつか処理をやってみます。

flg:trueのみ抽出

gettrueObjにflgがtrueのidを格納します。

すべてにcheck:falseを足す

すべての要素にcheck:falseというkey/valueを足します。
(ここではidを持っている要素を対象とすることで、itemオブジェクト配下にcheckというキーを足しています)

子供を持たない要素のみ抽出

item.childrenが子要素となっていますが、この子要素を持っていないitemを抽出します。

id以外のすべてのvalueをfalseにする

id以外(正確にはidとchildrenオブジェクト)のvalueをfalseとします。

実際にどういう値になるかはこちらをご参照ください

まとめ

_.cloneDeepWithはその名前からオブジェクト/配列の複製にしか使わなさそうな関数と思いがちですが、lodashの持つほとんどの関数は_.cloneDeepWithで代替できるほどに強力です。

もちろん負荷や速度とのトレードオフにはなりますが、困ったときの選択肢の一つとして検討してみてください。

ADs

Post Comments

メールアドレスが公開されることはありません。

Comments

コメントはまだありません。