email-misspelled
Version:
Check misspell email's domain and return a list of matching domain suggestions
22 lines (21 loc) • 1.1 kB
JavaScript
// TODO: split this into 2 function, one for calculating, second for filtering
/* eslint complexity: 0 */
// https://github.com/trekhleb/javascript-algorithms/tree/master/src/algorithms/string/levenshtein-distance
export const lettersComparison = (value = "", misspelledMax = 1) => (ref) => {
const distanceMatrix = Array(value.length + 1)
.fill(null)
.map(() => Array(ref.suggest.length + 1).fill(null));
for (let i = 0; i <= ref.suggest.length; i += 1)
distanceMatrix[0][i] = i;
for (let j = 0; j <= value.length; j += 1)
distanceMatrix[j][0] = j;
for (let j = 1; j <= value.length; j += 1) {
for (let i = 1; i <= ref.suggest.length; i += 1) {
const indicator = ref.suggest[i - 1] === value[j - 1] ? 0 : 1;
distanceMatrix[j][i] = Math.min(distanceMatrix[j][i - 1] + 1, distanceMatrix[j - 1][i] + 1, distanceMatrix[j - 1][i - 1] + indicator);
}
}
// eslint-disable-next-line
ref.misspelledCount = distanceMatrix[value.length][ref.suggest.length];
return ref.misspelledCount <= misspelledMax;
};