npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@gmjs/binary-search

v0.0.1

Published

binary-search

Readme

Binary Search

This library contains functions for binary search of sorted arrays.

Installation

npm install --save @gmjs/binary-search

Usage

General

All functions return an index of the found element or -1 if the element is not found.

Function have the following name formats:

  • binarySearchIndex<comparison-type>
  • binarySearchIndex<comparison-type>Abitrary

Comparison Types

There are five built-in 'comparison types' that can be used when searching:

  • Exact - Searched value must be exactly equal to the element.
  • Lte - Returns the index of the largest element that is less than or equal to the searched value.
  • Lt - Returns the index of the largest element that is strictly less than the searched value.
  • Gte - Returns the index of the smallest element that is greater than or equal to the searched value.
  • Gt - Returns the index of the smallest element that is strictly greater than the searched value.

The above comparison types are part of the function name. For example, if we wanted to have an exact search on a simple number array, we would use the function binarySearchIndexExact.

Types of Arrays

number Arrays

Binary search on simple number arrays have the following name format:

binarySearchIndex<comparison-type>

Arbitrary Arrays

Binary search on arbitrary arrays have the following name format:

binarySearchIndex<comparison-type>Arbitrary

You are required to provide a comparison function that will be used to compare the searched value with the elements of the array.

Value and element do not have to be of the same type.

Arrays still need to be sorted with regards to the comparison function. This means, for example, that if the comparison function returns 'less than' for comparison of the input value with an element at index i, it should also return 'less than' for comparison of the input value with any element at index j where j > i.

Parameters

All functions accept the following parameters:

  • value - The value to search for.
  • array - The array to search in. Must be sorted.

Additionally, *Arbitrary functions also accept the following parameter:

  • compare - The comparison function to use.

compare function

Compare function has two parameters:

  • value - The value to search for.
  • item - The element of the array the value is currently being compared to.

Function returns a number:

  • 0 - if value is equal to item.
  • Any negative value if value is less than item.
  • Any positive value if value is greater than item.

API Listing

  • binarySearchIndexExact - Returns the index of the value in the array. Value needs to be exactly equal to the element at the index.
  • binarySearchIndexExactArbitrary - Returns the index of the value in the array. Value needs to be exactly equal to the element at the index, as determined by the comparison function.
  • binarySearchIndexLte - Returns the index of the largest element that is less than or equal to the value.
  • binarySearchIndexLteArbitrary - Returns the index of the largest element that is less than or equal to the value, as determined by the comparison function.
  • binarySearchIndexLt - Returns the index of the largest element that is strictly less than the value.
  • binarySearchIndexLtArbitrary - Returns the index of the largest element that is strictly less than the value, as determined by the comparison function.
  • binarySearchIndexGte - Returns the index of the smallest element that is greater than or equal to the value.
  • binarySearchIndexGteArbitrary - Returns the index of the smallest element that is greater than or equal to the value, as determined by the comparison function.
  • binarySearchIndexGt - Returns the index of the smallest element that is strictly greater than the value.
  • binarySearchIndexGtArbitrary - Returns the index of the smallest element that is strictly greater than the value, as determined by the comparison function.

API

In the examples below, when using the number array functions, we will assume that the following array is initialized:

const array = [0, 10, ..., 100];

When using the *Arbitrary functions, we will assume that the following comparison array is initialized:

interface Item {
  readonly value: number;
}

const array = [
  { value: 0 },
  { value: 10 },
  ...
  { value: 100 }
];

Also, when using the *Arbitrary functions, we will assume that the following comparison function is specified:

const compare = (value: number, item: Item): number => value - item.value;

binarySearchIndexExact

Returns the index of the value in the array. Value needs to be exactly equal to the element at the index.

const i1 = binarySearchIndexExact(10, array); // 1
const i2 = binarySearchIndexExact(100, array); // 10
const i3 = binarySearchIndexExact(15, array); // -1
const i4 = binarySearchIndexExact(-10, array); // -1
const i5 = binarySearchIndexExact(110, array); // -1

binarySearchIndexExactArbitrary

Returns the index of the value in the array. Value needs to be exactly equal to the element at the index, as determined by the comparison function.

const i1 = binarySearchIndexExactArbitrary(10, array, compare); // 1
const i2 = binarySearchIndexExactArbitrary(100, array, compare); // 10
const i3 = binarySearchIndexExactArbitrary(15, array, compare); // -1
const i4 = binarySearchIndexExactArbitrary(-10, array, compare); // -1
const i5 = binarySearchIndexExactArbitrary(110, array, compare); // -1

binarySearchIndexLte

Returns the index of the largest element that is less than or equal to the value.

const i1 = binarySearchIndexLte(10, array); // 1
const i2 = binarySearchIndexLte(100, array); // 10
const i3 = binarySearchIndexLte(15, array); // 1
const i4 = binarySearchIndexLte(-10, array); // -1
const i5 = binarySearchIndexLte(110, array); // 10

binarySearchIndexLteArbitrary

Returns the index of the largest element that is less than or equal to the value, as determined by the comparison function.

const i1 = binarySearchIndexLteArbitrary(10, array, compare); // 1
const i2 = binarySearchIndexLteArbitrary(100, array, compare); // 10
const i3 = binarySearchIndexLteArbitrary(15, array, compare); // 1
const i4 = binarySearchIndexLteArbitrary(-10, array, compare); // -1
const i5 = binarySearchIndexLteArbitrary(110, array, compare); // 10

binarySearchIndexLt

Returns the index of the largest element that is strictly less than the value.

const i1 = binarySearchIndexLt(10, array); // 0
const i2 = binarySearchIndexLt(100, array); // 9
const i3 = binarySearchIndexLt(15, array); // 1
const i4 = binarySearchIndexLt(-10, array); // -1
const i5 = binarySearchIndexLt(110, array); // 10

binarySearchIndexLtArbitrary

Returns the index of the largest element that is strictly less than the value, as determined by the comparison function.

const i1 = binarySearchIndexLtArbitrary(10, array, compare); // 0
const i2 = binarySearchIndexLtArbitrary(100, array, compare); // 9
const i3 = binarySearchIndexLtArbitrary(15, array, compare); // 1
const i4 = binarySearchIndexLtArbitrary(-10, array, compare); // -1
const i5 = binarySearchIndexLtArbitrary(110, array, compare); // 10

binarySearchIndexGte

Returns the index of the smallest element that is greater than or equal to the value.

const i1 = binarySearchIndexGte(10, array); // 1
const i2 = binarySearchIndexGte(100, array); // 10
const i3 = binarySearchIndexGte(15, array); // 2
const i4 = binarySearchIndexGte(-10, array); // 0
const i5 = binarySearchIndexGte(110, array); // -1

binarySearchIndexGteArbitrary

Returns the index of the smallest element that is greater than or equal to the value, as determined by the comparison function.

const i1 = binarySearchIndexGteArbitrary(10, array, compare); // 1
const i2 = binarySearchIndexGteArbitrary(100, array, compare); // 10
const i3 = binarySearchIndexGteArbitrary(15, array, compare); // 2
const i4 = binarySearchIndexGteArbitrary(-10, array, compare); // 0
const i5 = binarySearchIndexGteArbitrary(110, array, compare); // -1

binarySearchIndexGt

Returns the index of the smallest element that is strictly greater than the value.

const i1 = binarySearchIndexGt(10, array); // 2
const i2 = binarySearchIndexGt(100, array); // -1
const i3 = binarySearchIndexGt(15, array); // 2
const i4 = binarySearchIndexGt(-10, array); // 0
const i5 = binarySearchIndexGt(110, array); // -1

binarySearchIndexGtArbitrary

Returns the index of the smallest element that is strictly greater than the value, as determined by the comparison function.

const i1 = binarySearchIndexGtArbitrary(10, array, compare); // 2
const i2 = binarySearchIndexGtArbitrary(100, array, compare); // -1
const i3 = binarySearchIndexGtArbitrary(15, array, compare); // 2
const i4 = binarySearchIndexGtArbitrary(-10, array, compare); // 0
const i5 = binarySearchIndexGtArbitrary(110, array, compare); // -1