email-misspelled
Version:
Check misspell email's domain and return a list of matching domain suggestions
26 lines (25 loc) • 1.25 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.lettersComparison = void 0;
// 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
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;
};
exports.lettersComparison = lettersComparison;