didyoumean2
is a library for matching human-quality input to a list of potential matches using the Levenshtein distance algorithm.
It is inspired by didyoumean.js.
-
Based on fastest-levenshtein, the fastest JS implementation of the Levenshtein distance algorithm
-
~100% faster than didyoumean.js
-
Well tested with 100% coverage
-
Static type checking with TypeScript
-
More control on what kind of matches you want to return
-
Support matching object's
path
instead of justkey
npm install didyoumean2
const didYouMean = require('didyoumean2').default
// or if you are using TypeScript or ES module
import didYouMean from 'didyoumean2'
// you can also access to Enums via:
const {
default: didYouMean,
ReturnTypeEnums,
ThresholdTypeEnums,
} = require('didyoumean2')
// or
import didYouMean, { ReturnTypeEnums, ThresholdTypeEnums } from 'didyoumean2'
We are using corepack to manage the yarn
version
corepack enable
didYouMean(input, matchList[, options])
-
input {string}
: A string that you are not sure and want to match withmatchList
-
matchList {Object[]|string[]}
: A List for matching withinput
-
options {Object}
(optional): An options that allows you to modify the behavior -
@return {Array|null|Object|string}
: A list of or single matched result(s), return object ifmatch
is{Object[]}
-
default:
false
-
Perform case-sensitive matching
-
default:
true
-
Perform combining diacritical marks insensitive matching
-
Refer to lodash _.deburr for how it works
-
default:
[]
-
If your
matchList
is an array of object, you must usematchPath
to point to the string that you want to match -
Refer to ramda R.path for how to define the path, e.g.
['obj', 'array', 0, 'key']
- default:
ReturnTypeEnums.FIRST_CLOSEST_MATCH
returnType | Description |
---|---|
ReturnTypeEnums.ALL_CLOSEST_MATCHES |
Return all matches with the closest value to the input in array |
ReturnTypeEnums.ALL_MATCHES |
Return all matches in array |
ReturnTypeEnums.ALL_SORTED_MATCHES |
Return all matches in array, sorted from closest to furthest |
ReturnTypeEnums.FIRST_CLOSEST_MATCH |
Return first match from ReturnTypeEnums.ALL_CLOSEST_MATCHES |
ReturnTypeEnums.FIRST_MATCH |
Return first match (FASTEST) |
-
depends on
thresholdType
-
type:
{number}
(similarity
) or{integer}
(edit-distance
) -
default:
0.4
(similarity
) or20
(edit-distance
) -
If the result is larger (
similarity
) or smaller (edit-distance
) than or equal to thethreshold
, that result is matched
- default:
ThresholdTypeEnums.SIMILARITY
thresholdType | Description |
---|---|
ThresholdTypeEnums.EDIT_DISTANCE |
Refer to Levenshtein distance algorithm, must be integer , lower value means more similar |
ThresholdTypeEnums.SIMILARITY |
l = max(input.length, matchItem.length), similarity = (l - editDistance) / l , number from 0 to 1 , higher value means more similar |
-
default:
true
-
Remove noises when matching
-
Trim all starting and ending spaces, and concatenate all continuous spaces to one space
Before all:
npm install -g yarn
yarn install
Unit test and coverage:
yarn test
Linter:
yarn lint