Hashing array of strings

Benchmark created by FredyC on


Setup

var arr1 = ['alpha', 'beta', 'gama', 'delta', 'theta'];
    var arr2 = arr1.reverse();
    
    var theMap = {};
    var lookup = function(arr, hashFn) {
      var item = null;
      var hashed = hashFn(arr);
      if (item = theMap[hashed]) {
        return item;
      }
      var item = {
        arr: arr
      };
      theMap[hashed] = item;
      return item;
    };
    
    function hashWithJoin(array) {
      return array.sort().join('\u200b');
    };
    
    function hashWithXor(array) {
      var code = 0;
      for (var i = 0; i < array.length; i++) {
        var n = 0;
        for (var j = 0; j < array[i].length; j++) {
          n = n * 251 ^ array[i].charCodeAt(j);
        }
        code ^= n;
      }
      return code
    };

Test runner

Ready to run.

Testing in
TestOps/sec
Joining strings
lookup(arr1, hashWithJoin) === lookup(arr2, hashWithJoin)
ready
Real hashing
lookup(arr1, hashWithXor) === lookup(arr2, hashWithXor)
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.