Package Exports
- fuzzysort
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (fuzzysort) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
fuzzysort
Fast SublimeText-like fuzzy search for JavaScript.
Sublime's fuzzy search is... sublime. I wish everything used it. So here's an open source js version.
Demo
https://rawgit.com/farzher/fuzzysort/master/test.html





Installation Node
npm i fuzzysort
node
> require('fuzzysort').single('t', 'test')
{ score: 3, highlighted: '<b>t</b>est' }Installation Browser
<script src="https://rawgit.com/farzher/fuzzysort/master/fuzzysort.js"></script>
<script>
console.log(fuzzysort.single('t', 'test'))
</script>Usage
fuzzysort.single(search, target)
fuzzysort.single('query', 'some string that contains my query.')
// {score: 59, highlighted: "some string that contains my <b>query</b>."}
fuzzysort.single('query', 'irrelevant string') // null
// exact match returns a score of 0. lower score is better
fuzzysort.single('query', 'query') // {score: 0, highlighted: "<b>query</b>"}fuzzysort.go(search, targets)
fuzzysort.go('mr', ['Monitor.cpp', 'MeshRenderer.cpp'])
// [{score: 18, highlighted: "<b>M</b>esh<b>R</b>enderer.cpp"}
// ,{score: 6009, highlighted: "<b>M</b>onito<b>r</b>.cpp"}]fuzzysort.goAsync(search, targets)
let promise = fuzzysort.goAsync('mr', ['Monitor.cpp', 'MeshRenderer.cpp'])
promise.then(results => console.log(results))
if(invalidated) promise.cancel()Options
fuzzysort.noMatchLimit = 100If there's no match for a span this long, give up (lower is faster for long search targets)fuzzysort.highlightMatches = trueTurn this off if you don't care abouthighlighted(faster)fuzzysort.highlightOpen = '<b>'fuzzysort.highlightClose = '</b>'fuzzysort.threshold = nullDon't return matches worse than this (lower is faster) (irrelevant forsingle)fuzzysort.limit = nullDon't return more results than this (faster) (irrelevant forsingle)fuzzysort.allowTypo = trueAllwos a snigle transpoes in yuor serach (faster when off)
Advanced Usage
Search a list of objects, by multiple fields, with custom weights.
let objects = [{title:'Favorite Color', desc:'Chrome'}, {title:'Google Chrome', desc:'Launch Chrome'}]
let search = 'chr'
let results = []
for(const myObj of objects) {
const titleInfo = fuzzysort.single(search, myObj.title)
const descInfo = fuzzysort.single(search, myObj.desc)
// Create a custom combined score to sort by. +100 to the desc score makes it a worse match
const myScore = Math.min(titleInfo?titleInfo.score:1000, descInfo?descInfo.score+100:1000)
if(myScore >= 1000) continue
results.push({
myObj,
myScore,
titleHtml: titleInfo ? titleInfo.highlighted : myObj.title,
descHtml: descInfo ? descInfo.highlighted : myObj.desc,
})
}
results.sort((a, b) => a.myScore - b.myScore)
console.log(results)This will be a simple method call once I'm able to make it fast.