1分でわかるJavaScriptのUnderscore.jsとLodashの違いと注意点

LodashはUnderscore.jsの上位互換?

よくLodashはUnderscore.jsの上位互換と言われる。これはUnderscore.js(1.9.1)で使用できる_.ではじまるメソッド数が121なのに対しLodash(4.17.11)は325と大幅に多く、できることが多いからだ。

LodashとUnderscore.jsでは互換性があるメソッドとないメソッドがあり、Lodashでは使えるがUnderscore.jsでは使用できないメソッドもあるため注意が必要。

それぞれのバージョンを調べる方法

LodashUnderscore.jsの公式サイトにアクセスしてConsoleで_.VERSIONを実行すると、それぞれ4.17.11と1.9.1が返ってくる。

2019年7月現在ではUnderscore.jsの最新バージョンは1.9.1なので2以上の値が返ってきた場合はLodashが使用されていることになる。

Lodashのバージョン別ドキュメントの場所

Lodashの公式サイトのDcumentationの左上にはバージョン切り替えのセレクトボックスがあるが、4.17.11, 3.10.1, 2.4.2, 1.3.1しか選択できない。
Lodashのバージョン別のドキュメントの場所

例えば3.2.0のドキュメントが見たくてURLのバージョン部分を/docs/3.2.0に変えても見ることはできない。

古いマイナーバージョンのドキュメントはGitHubのほうにあるので、3.2.0のドキュメントを見たい場合は下記のURLにアクセスする。

https://github.com/lodash/lodash/tree/3.2.0/doc

最新版Lodashで使用できないメソッド

Underscore.jsで使用できるが最新版Lodashで使用できないメソッドが14種類存在する

特に_.where, _.contains, _.pluckなどはUnderscore.jsでは使用頻度が高いメソッドなのでLodashに移行する際は必ず覚えておこう。

_.where _.findWhere _.contains _.pluck
_.indexBy _.object _.compose _.restArguments
_.allKeys _.mapObject _.pairs _.extendOwn
_.matcher _.value

_.pluckはLodashでもv3まで使用できたが、v4は_.mapしか使用できない。

// v3は_pluckと_.mapの両方使用可能
// v4は_.mapしか使用できない
_.pluck(obj, 'a')
_.map(obj, 'a')
// => [1, 2]

Lodashもバージョンが違えば使えないメソッドが出てくる。

例えば_.uniqueはv3まで使用できたが、v4は_.uniqしか使用できない。

// v3は_.uniqueと_.uniqの両方使用可能
// v4は_.uniqしか使用できない
var arr1 = _.uniq([1, 1, 2, 3, 3])
var arr2 = _.unique([1, 1, 2, 3, 3])
console.log(arr1)
console.log(arr2)
// => [1, 2, 3]

Lodashをあえて使用しないことも必要

_.where, _.containsが最新版のLodashでなくなっているが、これはJavaScript標準の.filterや.includesで対応できるからだ。

将来的にJavaScriptだけで実装できるメソッドが最新バージョンで削除される可能性があるので、代用可能な場合はなるべくLodashで使用しないほうが良いだろう。