feat(ObjectSorter): now sorts objects by likability
This commit is contained in:
parent
fdf9ec6358
commit
dc856dd5c7
23
test/test.ts
23
test/test.ts
@ -14,11 +14,30 @@ tap.test('should create an instance of Smartfuzzy', async () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
tap.test('should compute a score', 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 () => {
|
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();
|
tap.start();
|
||||||
|
@ -1 +1,2 @@
|
|||||||
export * from './smartfuzzy.classes.smartfuzzy';
|
export * from './smartfuzzy.classes.smartfuzzy';
|
||||||
|
export * from './smartfuzzy.classes.objectsorter';
|
||||||
|
26
ts/smartfuzzy.classes.objectsorter.ts
Normal file
26
ts/smartfuzzy.classes.objectsorter.ts
Normal 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -2,6 +2,8 @@ import * as plugins from './smartfuzzy.plugins';
|
|||||||
|
|
||||||
export let standardExport = 'Hi there! :) This is an exported string';
|
export let standardExport = 'Hi there! :) This is an exported string';
|
||||||
|
|
||||||
|
export type TDictionaryMap = { [key: string]: number };
|
||||||
|
|
||||||
export class Smartfuzzy {
|
export class Smartfuzzy {
|
||||||
dictionary: string[];
|
dictionary: string[];
|
||||||
constructor(dictionary: string[]) {
|
constructor(dictionary: string[]) {
|
||||||
@ -24,12 +26,12 @@ export class Smartfuzzy {
|
|||||||
* returns the closest match for a given string
|
* returns the closest match for a given string
|
||||||
* @param stringArg
|
* @param stringArg
|
||||||
*/
|
*/
|
||||||
getChangeScoreForString(stringArg) {
|
getChangeScoreForString(stringArg): TDictionaryMap {
|
||||||
const dictionaryMap: { [key: string]: number } = {};
|
const dictionaryMap: TDictionaryMap = {};
|
||||||
for (const wordArg of this.dictionary) {
|
for (const wordArg of this.dictionary) {
|
||||||
dictionaryMap[wordArg] = plugins.leven(stringArg, wordArg);
|
dictionaryMap[wordArg] = plugins.leven(stringArg, wordArg);
|
||||||
}
|
}
|
||||||
console.log(dictionaryMap);
|
return dictionaryMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
getClosestMatchForString(stringArg: string) {
|
getClosestMatchForString(stringArg: string) {
|
||||||
@ -39,7 +41,7 @@ export class Smartfuzzy {
|
|||||||
name: wordArg
|
name: wordArg
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
const options = {
|
const fuseOptions = {
|
||||||
shouldSort: true,
|
shouldSort: true,
|
||||||
threshold: 0.6,
|
threshold: 0.6,
|
||||||
location: 0,
|
location: 0,
|
||||||
@ -48,8 +50,8 @@ export class Smartfuzzy {
|
|||||||
minMatchCharLength: 1,
|
minMatchCharLength: 1,
|
||||||
keys: ['name']
|
keys: ['name']
|
||||||
};
|
};
|
||||||
const fuse = new plugins.fuseJs(fuseDictionary, options);
|
const fuse = new plugins.fuseJs(fuseDictionary, fuseOptions);
|
||||||
const result = fuse.search(stringArg);
|
const result = fuse.search(stringArg);
|
||||||
console.log(result);
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user