-
-
Save lancejpollard/70661895ba453cd6b9493b6e561e6eab to your computer and use it in GitHub Desktop.
Soundex in JavaScript
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var soundex = function (s) { | |
var a = s.toLowerCase().split(''), | |
f = a.shift(), | |
r = '', | |
codes = { | |
a: '', e: '', i: '', o: '', u: '', | |
b: 1, f: 1, p: 1, v: 1, | |
c: 2, g: 2, j: 2, k: 2, q: 2, s: 2, x: 2, z: 2, | |
d: 3, t: 3, | |
l: 4, | |
m: 5, n: 5, | |
r: 6 | |
}; | |
r = f + | |
a | |
.map(function (v, i, a) { return codes[v] }) | |
.filter(function (v, i, a) { | |
return ((i === 0) ? v !== codes[f] : v !== a[i - 1]); | |
}) | |
.join(''); | |
return (r + '000').slice(0, 4).toUpperCase(); | |
}; | |
var tests = { | |
"Soundex": "S532", | |
"Example": "E251", | |
"Sownteks": "S532", | |
"Ekzampul": "E251", | |
"Euler": "E460", | |
"Gauss": "G200", | |
"Hilbert": "H416", | |
"Knuth": "K530", | |
"Lloyd": "L300", | |
"Lukasiewicz": "L222", | |
"Ellery": "E460", | |
"Ghosh": "G200", | |
"Heilbronn": "H416", | |
"Kant": "K530", | |
"Ladd": "L300", | |
"Lissajous": "L222", | |
"Wheaton": "W350", | |
"Ashcraft": "A226", | |
"Burroughs": "B622", | |
"Burrows": "B620", | |
"O'Hara": "O600" | |
}; | |
for (var i in tests) | |
if (tests.hasOwnProperty(i)) { | |
console.log( | |
i + | |
' \t' + | |
tests[i] + | |
'\t' + | |
soundex(i) + | |
'\t' + | |
(soundex(i) === tests[i]) | |
); | |
} | |
// Soundex S532 S532 true | |
// Example E251 E251 true | |
// Sownteks S532 S532 true | |
// Ekzampul E251 E251 true | |
// Euler E460 E460 true | |
// Gauss G200 G200 true | |
// Hilbert H416 H416 true | |
// Knuth K530 K530 true | |
// Lloyd L300 L300 true | |
// Lukasiewicz L222 L222 true | |
// Ellery E460 E460 true | |
// Ghosh G200 G200 true | |
// Heilbronn H416 H416 true | |
// Kant K530 K530 true | |
// Ladd L300 L300 true | |
// Lissajous L222 L222 true | |
// Wheaton W350 W350 true | |
// Ashcraft A226 A226 true | |
// Burroughs B622 B622 true | |
// Burrows B620 B620 true | |
// O'Hara O600 O600 true |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment