Skip to content

A javascript port of fzy's scoring algorithm. As seen on GitHub.com!

License

Notifications You must be signed in to change notification settings

jhawthorn/fzy.js

Folders and files

NameName
Last commit message
Last commit date

Latest commit

327b2ae · Sep 11, 2024

History

43 Commits
Sep 11, 2024
Apr 7, 2020
Nov 4, 2018
Nov 3, 2018
Sep 22, 2021
Nov 4, 2018
Nov 4, 2018
Apr 7, 2020
Sep 11, 2024
Sep 11, 2024
Nov 4, 2018

Repository files navigation

fzy.js

A javascript port of fzy's fuzzy finder scoring algorithm

Try it out online!

CI status Build Size 0 Dependencies

Installation

npm i --save fzy.js

Usage

score(needle, haystack)

var fzy = require('fzy.js')

fzy.score("amuser", "app/models/user.rb")     // 5.595
fzy.score("amuser", "app/models/customer.rb") // 3.655

positions(needle, haystack)

fzy.positions("amuser", "app/models/user.rb")     // [ 0, 4, 11, 12, 13, 14 ]
fzy.positions("amuser", "app/models/customer.rb") // [ 0, 4, 12, 13, 17, 18 ]

NB: score and positions must be called with matching needle and haystack, doing otherwise is undefined. The caller needs to check that there is a match. See the full example below for a way to do this check.

Full Example

var { sortBy, escapeRegExp } = require("lodash");
var fzy = require("fzy.js");

// List of candidate strings
// Often generated by something like require("glob")("**/*")
var list = [
	"app/models/user.rb",
	"app/models/order.rb",
	"app/models/customer.rb"
];

// Usually this is input from the user
var query = "amuser";

// fzy.js includes `hasMatch` which can be used for filtering
list = list.filter((s) => fzy.hasMatch(s));

// Sort by fzy's scoring, descending (higher scores are better matches)
list = sortBy(list, (s) => -fzy.score(query, s));

// Select only the first 10 results
list.slice(0, 10);

// Print out our results with matched positions
list.forEach((s) => {
	var padded = "";
	var p = fzy.positions(query, s);
	for(var i = 0; i < query.length; i++) {
		padded = padded.padEnd(p[i], ' ') + query[i];
	}

	console.log(s);
	console.log(padded);
	console.log("");
});

// Output:
//
// app/models/user.rb
// a   m      user
//
// app/models/customer.rb
// a   m       us   er

About

A javascript port of fzy's scoring algorithm. As seen on GitHub.com!

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published