hash-mod
Version: 
Hash strings into numbers and then mod them into buckets.
39 lines (31 loc) • 738 B
JavaScript
var crypto = require('crypto');
/**
 * Expose `createHashMod`.
 */
module.exports = hashMod;
/**
 * Returns a `hashMod` function that will return an integer hash of a string
 * modded by `buckets`.
 *
 * @param {Number} buckets
 * @return {Function}
 */
function hashMod (buckets) {
  buckets = buckets || 100;
  return function (string) {
    return integerHash(string) % buckets;
  };
}
/**
 * Return the integer hash of a `string`.
 *
 * http://stackoverflow.com/questions/2624192/good-hash-function-for-strings
 *
 * @param {String} string
 * @returns {Number}
 */
function integerHash (string) {
  return (string+'').split('').reduce(function (memo, item) {
    return (memo * 31 * item.charCodeAt(0)) % 982451653;
  }, 7);
}