Map-likeというES2015 Mapのようなライブラリを書いた
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ぐらいしかありませんでした。
- Reduce file size · Issue #56 · almin/almin
- LRUキャッシュの調査メモ
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
を使うようにしてます)
以下のライブラリやツールなどでりようしています。
お知らせ欄
JavaScript Primerの書籍版がAmazonで購入できます。
JavaScriptに関する最新情報は週一でJSer.infoを更新しています。
GitHub Sponsorsでの支援を募集しています。