Soundex in JavaScript
| 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