こんにちは、”はふぃ”です。
lodashとはいろいろと便利なユーティリティー関数を集めたライブラリのことです。
同種として有名なUnderscore.jsと互換性があり、Underscore.jsより機能が多くて高速であるためよく利用されているようです。
lodash
- GitHub: https://github.com/lodash/lodash
- Document: http://lodash.com/docs
Underscore.js
- GitHub: https://github.com/jashkenas/underscore
- Document: http://underscorejs.org/
- 和訳: https://github.com/enja-oss/Underscore
参考:JavaScriptで関数型プログラミングを強力に後押しするUnderscore.jsのおすすめメソッド12選(lodashもあるよ)
目次
lodashのget
lodashのget()
はオブジェクトに対して利用する関数で深いプロパティを取得する際やプロパティ名が動的に変化する場合によく利用されます。
使い方
_.get([対象のオブジェクト], [プロパティのパス], [undefinedの場合のデフォルト値(省略可)])
< get.js >
const obj = {
key1: {
key2: {
key3: {
key4: 'value'
}
}
}
}
console.log(_.get(obj, 'key1.key2.key3.key4', 'no value')) // value
console.log(_.get(obj, 'key1.key2.key3.key5', 'no value')) // no value
nullの扱い
JavaScriptではundefined
やnull
は条件式で共にfalse
として扱われるため混同して考えがちです。
< example.js >
const obj = {
key1: undefined,
key2: null
}
const str1 = obj.key1 || 'str1'
const str2 = obj.key2 || 'str2'
console.log(str1) // str1
console.log(str2) // str2
しかし、lodashのgetでは対象の値がnull
だった場合でもnull
がそのまま返ってきます!
(第3引数で指定したデフォルト値は返ってきません)
< null.js >
const obj = {
key1: {
key2: {
key3: {
key4: null
}
}
}
}
console.log(_.get(obj, 'key1.key2.key3.key4', 'no value')) // null
※ undefined
の場合は第3引数で指定したデフォルト値が返ってきます。
対策
とはいえnull
でもundefined
でもデフォルト値を返して欲しい!という場合が多いと思います。
その場合は以下のように書けば解決するかと。
< solve.js >
const obj = {
key1: {
key2: {
key3: {
key4: null
}
}
}
}
console.log(_.get(obj, 'key1.key2.key3.key4') || 'no value') // no value
おわりに
Documentにはしっかり書いてあるのですが、JavaScriptの扱いと混同してハマったので書きました。
確かにnull
はそのまま返して欲しいってニーズはありそうだけど、便利なのか不便なのか…。