Array + Set で検索を高速に

Array#indexOf(item) !== -1をやって存在を確認するのが、どうにも速い気がしなくてやってみた。

とりあえず、Array.indexOf vs Set.has · jsPerfで速度確認。Set#hasが圧倒的に速い。

かと言って、単純な Set では以下の点で使いづらい

  • 値の順番操作が面倒
  • 入っている値に直にアクセスすることができない

ということで、配列的なんだけど、内部にSetオブジェクトを持ったものを作ってみた

  • https://gist.github.com/teramako/4970442
    • ECMAScript.next なのがたくさん入っているので、今のところ、Firefoxでないと動かないと思う
    • 値があるかどうかの確認は高速(UniqArray#hasの使用)
      • それ以外の操作は余計な処理をするので遅くなりそう
    • 値の重複は許さない(メリットでありデメリットでもある)
    • Setオブジェクトに値を突っ込むことになるので、メモリを食うかも?
    • delete演算子で、delete uniqArray[0]とかやると整合性が取れなくなる
      • Proxy を使ってdeleteに対してトラップすればいけるが、そこまでやる必要がある?
      • とりあえず、deleteは禁止