I currently have this encoding function which simply subtracts one from each character code:
String.fromCharCode.apply(null, text.split("").map(function(v) {
return v.charCodeAt() - 1;
}));
E.g. test
becomes sdrs
.
I know that this function is silly because it isn't a strong encoding algorithm, but that's not my point. The problem is that it is slow and causes a stack overflow for large strings (~130.000 in length).
I tried a regexp but that's even slower:
text.replace(/./g, function(v) {
return String.fromCharCode(v.charCodeAt() - 1);
});
I tested both on jsPerf.
Currently, I'm executing a function for each character in both functions. How can I make a function that does the same thing as what these functions are doing, but executes faster without stack overflows?
1 Answer 1
Try looping through it with a simple for loop:
var b = '';
for (var i = 0; i < a.length; i++)
{
b += String.fromCharCode(a.charCodeAt(i) - 1)
}
return b;
-
\$\begingroup\$ Wow, that seems amazingly fast. More than 20 times as fast in fact. Thanks! \$\endgroup\$pimvdb– pimvdb2011年08月30日 15:17:25 +00:00Commented Aug 30, 2011 at 15:17
Explore related questions
See similar questions with these tags.