didyoumean3
v1.2.5
Published
đ The fastest and easiestădidyoumeanăin the universe via levenshtein algorithm
Downloads
4,143
Maintainers
Readme
didyoumean3
Features
- Built-in fastest levenshtein algorithm
- Support custom return results
- Typescript
- Super fast
- More flexible configuration
- Super small (production.min.js < 2kb) and tree shaking! more info
Usage
install
npm i didyoumean3
// or
yarn add didyoumean3
use case
- base use
import { didyoumean3 } from 'didyoumean3'
// or
const { default: didyoumean3 } = require('didyoumean3');
let input = 'insargrm'
let list = [
'facebook', 'INSTAgram', ' in stagram', 'baidu', 'twitter', 'wechat', 'instagram', 'linkedin'
]
console.log(didyoumean3(input, list));
// will print:
// {
// winner: 'instagram', // đ„ This is the best match, our winnerïŒ
// matched: [
// {
// score: 8,
// target: 'facebook',
// },
// {
// score: 3,
// target: 'instagram',
// },
// {
// score: 7,
// target: 'linkedin',
// },
// // ...
// ],
// }
- optional configuration
didyoumea3
has some built-in string formatting configuration itemsïŒ
ignore
: Ignore case when comparing, default false.trim
: Usestring.trim
format the string, default true.trimAll
: Use regexp/\s+/g
formate the string, default false.diacritics
: Usenormalize
Api, e.g. 'café' -> 'café'.normalize(), default falsenormalize
: Customize the formatting function by yourself.
đ„ If these parameters don't meet your requirements, you can customize the formatting function through
normalize
.
đ„ When using the custom normalize function, the above string formatting configurations will be ignored.
didyoumean3(input, target, { normalize: (s: string) => s.trim() } );
result
: Customize the structure of the results you want to return
// default result may be null or {winner: xx, matched: []}
type Res = null | { matched: any[], winner: string }
// you can custom your own result style!!
const result = (res: Res) => {
if (!res) return 'nothing matched!'
else return res
}
didyoumean3(input, target, { result } );
filter
: You can filter the results you want, such as those with a score greater than 5
let i2 = 'insargrm';
let l2 = ['facebook', 'instagram', 'linkedin'];
expect(
didyoumean3(i2, l2, { filter: (score: number, item: any) => score >= 7 })
?.matched.length
).toBe(2);
benchmark
didyoumean x 159,428 ops/sec ±1.63% (85 runs sampled)
didyoumean2 x 227,343 ops/sec ±1.26% (90 runs sampled)
didyoumean3 x 400,683 ops/sec ±0.59% (89 runs sampled)
Fastest is didyoumean3
contributors
Both issure and pr are welcome!