map-likeという小さなMapオブジェクトのライブラリを書きました。

API的にはES2015のMapと同じです。

制限

  • Symbol.Iteratorが実装されていません
  • toStringが実装されていません

つまりIteratorは省いています。

目的

Mapのpolyfillを書いたことがある人はわかるかもしれませんが、オブジェクトをkeyにできるMapがほしいだけなのに、結構でかくなります。 これはIteratorを実装する部分が大きく、Symbol.Iteratorをどうするかとか色々あります。 正直Mapをfor...ofで回したいとかは殆ど必要なかったので、それ以外の部分はMapと互換を持つmap-likeというライブラリを書きました。

ファイルサイズも1.5kBほどです。

✈ bundle-size map-like
[email protected]

env  bundle   minify   gzip
--   5.73 kB  3.08 kB  1.5 kB

「オブジェクトリテラルをマップのようなものとして使いたくない」や「オブジェクトをMapのキーとして使いたい」というケースで便利です。

派生としてLRU cacheライブラリのlru-map-likeというものもあります。

LRUライブラリは色々あるのですが、オブジェクトをキーとして使えるLRUはnode-lru-cacheぐらいしかありませんでした。

node-lru-cacheは便利なのですが、やはりサイズが大きい(10kb gzip)です。

lru-map-likeは大体2kBです。

env  bundle   minify   gzip
--   13.8 kB  6.32 kB  2.34 kB

おわり

オブジェクトリテラルでマップのようなことをやるよりは、 ES2015のMapを使ったほうが明示的で良いです。 あと、キーにオブジェクトに使える便利な場面がキャッシュのようなものを実装する際にはよく出現します。 (Map <-> Objectの相互変換は難しいものでもないので、最近はマップっぽいものがでてきたらMapを使うようにしてます)

以下のライブラリやツールなどでりようしています。