UNPKG

string-metric

Version:

Get string similarity in JavaScript or TypeScript

54 lines (53 loc) 1.72 kB
"use strict"; 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;