fuzzbunny est une petite bibliothèque (1K) (1K), rapide et efficace de la mémoire floue de recherche / correspondance / mise en surbrillance. Il fonctionne aussi bien dans un environnement de navigateur ou Node.js.
D'autres bibliothèques similaires sont FuzzyMatch, Fuzzy, Fuzzy-Search, Fuzzyjs.
fuzzbunny vise à être agile et rapide. Il a une API simple qui peut facilement être intégrée à n'importe quelle bibliothèque frontal pour créer une excellente interface utilisateur de recherche. Nous l'utilisons sur Mixpanel.com pour alimenter nos listes d'automobiles et nos tables.
npm install --save fuzzbunny ou yarn add fuzzbunny
Démo du catalogue Fuzzbunny Gutenberg →

const { fuzzyFilter , fuzzyMatch } = require ( `fuzzbunny` ) ;
// or import {fuzzyFilter, fuzzyMatch} from 'fuzzbunny';
const heroes = [
{
name : `Claire Bennet` ,
ability : `Rapid cellular regeneration` ,
} ,
{
name : `Micah Sanders` ,
ability : `Technopathy` ,
} ,
{
name : `Hiro Nakamura` ,
ability : `Space-time manipulation` ,
} ,
{
name : `Peter Petrelli` ,
ability : `Tactile power mimicry` ,
} ,
] ;
// Use fuzzyFilter to filter an array of items on specific fields and get filtered + score-sorted results with highlights.
const results = fuzzyFilter ( heroes , `stm` , { fields : [ `name` , `ability` ] } ) ;
/*
results = [
{
item: {
name: 'Peter Petrelli',
ability: 'Tactile power mimicry',
},
score: 1786,
highlights: {
ability: ['', 'T', 'actile power ', 'm', 'imicry'],
},
},
{
item: {
name: 'Hiro Nakamura',
ability: 'Space-time manipulation',
},
score: 983,
highlights: {
ability: ['Space-', 't', 'ime ', 'm', 'anipulation'],
},
},
];
*/
// Use fuzzyMatch to match a single string to get score + highlights. Returns null if no match found.
const match = fuzzyMatch ( heroes [ 0 ] . name , `ben` ) ;
/*
match = {
score: 2893,
highlights: ['Claire ', 'Ben', 'net'],
};
*/ fuzzbunny utilise un algorithme de notation qui priorise les signaux suivants. Voir la fonction _getMatchScore .
Exemple 1:
{Mayfl}ower se classe au-dessus The {Mayfl}owerThe {Mayfl}ower se classe au-dessus de Story of the {Mayfl}owerThe {Mayfl}ower se classe au-dessus de {May} {fl}owerThe {May} {fl}ower se classe au-dessus This {May} {fl}ower 
Exemple 2:
const f = require ( `fuzzbunny` ) ;
f . fuzzyMatch ( `Gobbling pupusas` , `usa` ) ;
// {score: 2700, highlights: ['Gobbling pup', 'usa', 's']}
f . fuzzyMatch ( `United Sheets of Antarctica` , `usa` ) ;
// {score: 2276, highlights: ['', 'U', 'nited ', 'S', 'heets of ', 'A', 'ntarctica']} Gobbling pup{usa}s Gagnie car une séquence contiguë de 3 lettres donne un score plus élevé.
Remarque : fuzzbunny optme pour des résultats significatifs. Il fait uniquement de la sous-chaîne / préfixe / acronyme de correspondance, pas de correspondance gourmand.
En effet, les cerveaux humains sont excellents pour le rappel du préfixe. Par exemple, les mots qui commencent par "CA" sont beaucoup plus faciles à rappeler que les mots qui contiennent les lettres "C" et "A" quelque part. Il est facile de se rappeler que {usa} signifie {U}nited {S}tates of {A}merica , pas F{u}ll Java{s}cript Fr{a}mework
fuzzbunny correspond à ~ millions de lignes / seconde sur le matériel moderne. Testé sur MacBook Pro 2018 avec CPU 2,4 GHz. Voir tests / performances.js
fuzzbunny est livré avec des types de dactylographies autoogénés. Voir index.d.ts