fuzzbunny es una pequeña biblioteca de búsqueda/coincidencia/resaltar de cadena de cadena de fuzzy de 1K). Funciona igualmente bien en un entorno o nodo del navegador.js.
Otras bibliotecas similares son FuzzyMatch, Fuzzy, Fuzzy-Search, Fuzzyjs.
fuzzbunny tiene como objetivo ser ágil y rápido. Tiene una API simple que se puede integrar fácilmente con cualquier biblioteca frontend para crear una excelente UI de búsqueda. Lo usamos en mixpanel.com para alimentar nuestros menores de interfaz de usuario y tablas.
npm install --save fuzzbunny o yarn add fuzzbunny
Demo de catálogo de 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 utiliza un algoritmo de puntuación que prioriza las siguientes señales. Ver la función _getMatchScore .
Ejemplo 1:
{Mayfl}ower se clasifica por encima The {Mayfl}owerThe {Mayfl}ower se clasifica por encima de Story of the {Mayfl}owerThe {Mayfl}ower se clasifica arriba {May} {fl}owerThe {May} {fl}ower se clasifica por encima de This {May} {fl}ower 
Ejemplo 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 gana porque la secuencia contigua de 3 letras produce una puntuación más alta.
Nota : fuzzbunny opta por resultados significativos. Solo lo hace la subcadena/prefijo/acrónimo, no la coincidencia codiciosa.
Esto se debe a que los cerebros humanos son excelentes en el retiro del prefijo. Por ejemplo, las palabras que comienzan con "CA" son mucho más fáciles de recordar que las palabras que contienen las letras "C" y "A" en algún lugar. Es fácil recordar que {usa} significa {U}nited {S}tates of {A}merica , no F{u}ll Java{s}cript Fr{a}mework
fuzzbunny coincide con ~ millones de líneas/segundo en hardware moderno. Probado en MacBook Pro 2018 con CPU de 2.4GHz. Ver Tests/Performance.js
fuzzbunny viene con tipos de mecanografías autogeneradas. Ver index.d.ts