string-metric
Version:
Get string similarity in JavaScript or TypeScript
54 lines (53 loc) • 1.72 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.Levenshtein = void 0;
var utils_1 = require("./utils/utils");
var Levenshtein = /** @class */ (function () {
function Levenshtein() {
}
Levenshtein.prototype.distance = function (s1, s2, limit) {
if (limit === void 0) { limit = Number.MAX_VALUE; }
if (utils_1.isNullOrUndefined(s1)) {
throw new Error('s1 must neither be null nor undefined');
}
if (utils_1.isNullOrUndefined(s2)) {
throw new Error('s2 must neither be null nor undefined');
}
if (s1 === s2) {
return 0;
}
if (s1.length === 0) {
return s2.length;
}
if (s2.length === 0) {
return s1.length;
}
var v0 = Array(s2.length + 1);
var v1 = Array(s2.length + 1);
var vtemp = [];
for (var i = 0; i < v0.length; i++) {
v0[i] = i;
}
for (var i = 0; i < s1.length; i++) {
v1[0] = i + 1;
var minv1 = v1[0];
for (var j = 0; j < s2.length; j++) {
var cost = 1;
if (s1[i] === s2[j]) {
cost = 0;
}
v1[j + 1] = Math.min(v1[j] + 1, Math.min(v0[j + 1] + 1, v0[j] + cost));
minv1 = Math.min(minv1, v1[j + 1]);
}
if (minv1 >= limit) {
return limit;
}
vtemp = v0;
v0 = v1;
v1 = vtemp;
}
return v0[s2.length];
};
return Levenshtein;
}());
exports.Levenshtein = Levenshtein;
;