6 Commits

Author SHA1 Message Date
cbc72cd55b 1.1.1 2018-08-20 00:49:01 +02:00
a2d8f9575d fix(Smartfuzzy.getClosestMatchForString() now returns the cloesest string directly): update 2018-08-20 00:49:01 +02:00
6da6c6cca9 1.1.0 2018-08-19 20:52:52 +02:00
dc856dd5c7 feat(ObjectSorter): now sorts objects by likability 2018-08-19 20:52:52 +02:00
fdf9ec6358 1.0.3 2018-08-19 15:40:18 +02:00
8021e9f96f fix(package): npm name 2018-08-19 15:40:17 +02:00
6 changed files with 65 additions and 13 deletions

2
package-lock.json generated
View File

@ -1,6 +1,6 @@
{
"name": "smartfuzzy",
"version": "1.0.2",
"version": "1.1.1",
"lockfileVersion": 1,
"requires": true,
"dependencies": {

View File

@ -1,6 +1,6 @@
{
"name": "smartfuzzy",
"version": "1.0.2",
"name": "@pushrocks/smartfuzzy",
"version": "1.1.1",
"private": false,
"description": "fuzzy match strings against word dictionaries/arrays",
"main": "dist/index.js",

View File

@ -14,11 +14,30 @@ tap.test('should create an instance of Smartfuzzy', async () => {
});
tap.test('should compute a score', async () => {
testSmartfuzzy.getChangeScoreForString('Apple');
const result = testSmartfuzzy.getChangeScoreForString('Apple');
console.log(result);
});
tap.test('should get closest match', async () => {
testSmartfuzzy.getClosestMatchForString('Apple');
const result = testSmartfuzzy.getClosestMatchForString('Apple');
console.log(result);
});
tap.test('should sort objects', async () => {
class Car {
constructor(public brand: string) {}
}
let testObjectSorter: smartfuzzy.ObjectSorter<Car>;
testObjectSorter = new smartfuzzy.ObjectSorter([
new Car('BMW'),
new Car('Mercedes Benz'),
new Car('Volvo')
]);
const result = testObjectSorter.sort('Volvo', ['brand']);
console.log(result);
});
tap.start();

View File

@ -1 +1,2 @@
export * from './smartfuzzy.classes.smartfuzzy';
export * from './smartfuzzy.classes.objectsorter';

View File

@ -0,0 +1,26 @@
import * as plugins from './smartfuzzy.plugins';
export class ObjectSorter<T> {
public objectDictionary: T[];
constructor(objectDictionaryArg: T[] = []) {
this.objectDictionary = objectDictionaryArg;
}
sort(stringArg: string, objectKeysArg: string[]): T[] {
const fuseOptions = {
shouldSort: true,
threshold: 0.6,
location: 0,
distance: 100,
maxPatternLength: 32,
minMatchCharLength: 1,
keys: objectKeysArg
};
const fuse = new plugins.fuseJs(this.objectDictionary, fuseOptions);
const result = fuse.search(stringArg);
return result;
}
}

View File

@ -2,6 +2,8 @@ import * as plugins from './smartfuzzy.plugins';
export let standardExport = 'Hi there! :) This is an exported string';
export type TDictionaryMap = { [key: string]: number };
export class Smartfuzzy {
dictionary: string[];
constructor(dictionary: string[]) {
@ -24,22 +26,22 @@ export class Smartfuzzy {
* returns the closest match for a given string
* @param stringArg
*/
getChangeScoreForString(stringArg) {
const dictionaryMap: { [key: string]: number } = {};
getChangeScoreForString(stringArg): TDictionaryMap {
const dictionaryMap: TDictionaryMap = {};
for (const wordArg of this.dictionary) {
dictionaryMap[wordArg] = plugins.leven(stringArg, wordArg);
}
console.log(dictionaryMap);
return dictionaryMap;
}
getClosestMatchForString(stringArg: string) {
getClosestMatchForString(stringArg: string): string {
const fuseDictionary: { name: string }[] = [];
for (const wordArg of this.dictionary) {
fuseDictionary.push({
name: wordArg
});
}
const options = {
const fuseOptions = {
shouldSort: true,
threshold: 0.6,
location: 0,
@ -48,8 +50,12 @@ export class Smartfuzzy {
minMatchCharLength: 1,
keys: ['name']
};
const fuse = new plugins.fuseJs(fuseDictionary, options);
const result = fuse.search(stringArg);
console.log(result);
const fuse = new plugins.fuseJs(fuseDictionary, fuseOptions);
const fuzzyResult = fuse.search(stringArg);
let closestMatch: string = null;
if(fuzzyResult.length > 0) {
closestMatch = fuzzyResult[0].name;
}
return closestMatch;
}
}