fuzzyStringMatch.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports["default"] = void 0;
  6. var _lodash = _interopRequireDefault(require("lodash"));
  7. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
  8. // Creates an array of letter pairs from a given array
  9. // origin: https://github.com/d3/d3-array/blob/master/src/pairs.js
  10. var arrayPairs = function arrayPairs(array) {
  11. var ii = 0;
  12. var length = array.length - 1;
  13. var letter = array[0];
  14. var pairs = Array.from({
  15. length: length < 0 ? 0 : length
  16. });
  17. while (ii < length) {
  18. // Not entirely sure what ++ii does yet
  19. // eslint-disable-next-line no-plusplus
  20. pairs[ii] = [letter, letter = array[++ii]];
  21. }
  22. return pairs;
  23. }; // Based on http://stackoverflow.com/a/23305385
  24. var stringSimilarity = function stringSimilarity(str1, str2) {
  25. if (str1.length > 0 && str2.length > 0) {
  26. var pairs1 = arrayPairs(str1);
  27. var pairs2 = arrayPairs(str2);
  28. var unionLen = pairs1.length + pairs2.length;
  29. var hitCount;
  30. hitCount = 0;
  31. _lodash["default"].forIn(pairs1, function (val1) {
  32. _lodash["default"].forIn(pairs2, function (val2) {
  33. if (_lodash["default"].isEqual(val1, val2)) {
  34. hitCount += 1;
  35. }
  36. });
  37. });
  38. if (hitCount > 0) {
  39. return 2 * hitCount / unionLen;
  40. }
  41. }
  42. return 0;
  43. };
  44. var _default = function _default(needle, haystack) {
  45. var weight = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0.5;
  46. return stringSimilarity(needle, haystack) >= Number(weight);
  47. };
  48. exports["default"] = _default;
  49. module.exports = exports.default;