82 lines
2.0 KiB
JavaScript
82 lines
2.0 KiB
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
|