Posted 12/9/2013
Generating hashes from strings can be very handy. Surprisingly, in JavaScript, an arithmetic-operation-based algorithm is about three times faster than one using bit-wise operators—see for yourself (archive). I suggested to add the most performant method as hash method to underscore.string.js.
The code is simple:
hash: function (str) {
var hash = 0, len = str.length
if (len == 0) return hash;
for (var i = 0; i < len; i++) {
hash = hash * 31 + str.charCodeAt(i);
}
return hash;
}
It might be time to end statements on Stack Overflow along the lines of…
hash << 5 - hash
is the same ashash * 31 + char
but a LOT faster.
In times of interpreted languages and virtual machines one should reconsider if applying the same old rules still makes sense.
p.s. I was very surprised that the neat reduce-based version failed so miserably.