JavaScripでハッシュテーブルを実装してみた

JavaScriptで実装してもまったく意味ない(笑)

ただの練習です。


こんな感じでいいんだろうか?

String.prototype.hash = function(mod) {
  var sum = 0;
  for (var i = 0, len = this.length; i < len; i++)
    sum += this.charCodeAt(i) * i;

  return (mod) ? (sum%mod) : sum;
}

var ht = (function(){
  var size = 100;
  var table = new Array(size);

  return {
    add: function(obj) {
      var hash = obj.toString().hash(size);
      if (table[hash]) table[hash].push(obj);
      else table[hash] = [obj];
    },

    has: function(obj) {
      var hash = obj.toString().hash(size);
      if (table[hash])
        for (var i = 0, len = table[hash].length; i < len; i++)
          if (table[hash][i] == obj) return true;

      return false;
    }
  }
})();


toStringメソッドを持つオブジェクトであれば何でも格納できます。

ht.add("hoge");
ht.has("hoge");  //-> true
ht.has("fuga");  //-> false


var func = function(){ alert("hoge") }
var func2 = function(){ alert("fuga") }

ht.add(func);
ht.has(func);  //-> true
ht.has(func2);  //-> false


ht.add(new String("hoge"));
ht.has(new String("hoge"));  //-> false  /* オブジェクトとして比較しているため */