[!NOTE] This is one of 210 standalone projects, maintained as part of the @thi.ng/umbrella monorepo and anti-framework.
🚀 Please help me to work full-time on these projects by sponsoring me on GitHub. Thank you! ❤️
About
Array / Arraylike utilities.
Status
STABLE - used in production
Search or submit any issues for this package
Installation
yarn add @thi.ng/arrays
ESM import:
import * as arr from "@thi.ng/arrays";
Browser ESM import:
<script type="module" src="https://esm.run/@thi.ng/arrays"></script>
For Node.js REPL:
const arr = await import("@thi.ng/arrays");
Package sizes (brotli'd, pre-treeshake): ESM: 3.23 KB
Dependencies
Note: @thi.ng/api is in most cases a type-only import (not used at runtime)
Usage examples
Six projects in this repo's /examples directory are using this package:
| Screenshot | Description | Live demo | Source |
|---|---|---|---|
![]() |
k-means clustering visualization | Demo | Source |
| Randomized 4-point 2D color gradient image generator | Demo | Source | |
![]() |
Animated, iterative polygon subdivisions & visualization | Demo | Source |
![]() |
Responsive image gallery with tag-based Jaccard similarity ranking | Demo | Source |
![]() |
Responsive & reactively computed stacked column layout | Demo | Source |
![]() |
Tree-based UI to find & explore thi.ng projects via their associated keywords | Demo | Source |
API
arrayIterator()argMin()/argMax()argSort()binarySearch()bisect()blit1d()/ blit2d()endsWith()ensureArray()ensureIterable()fillRange()find()findSequence()floydRivest()fuzzyMatch()insert()into()isSorted()levenshtein()multiSwap()peek()permutation()quickSort()rotate()/rotateTyped()selectThresholdMin()/selectThresholdMax()shuffle()(w/ custom PRNG support)shuffleRange()(w/ custom PRNG support)sortByCachedKey()startsWith()swap()swizzle()topoSort()
Binary search result predicates
The following predicates can be used to perform predecessor / successor
queries using binarySearch().
bsLT()- Returns index of last item less than search value or -1 if no such values existbsLE()- Similar tobsLT(), but for less-than-equals queriesbsGT()- Returns index of first item greater than search value or -1 if no such values existbsGE()- Similar tobsGT(), but for less-than-equals queriesbsEQ()- Merely syntax sugar, casting any non-found result indices to -1
import { binarySearch, bsGT, bsLT } from "@thi.ng/arrays";
const src = [10, 20, 30, 40];
bsLT(binarySearch(src, 25))
// 1
// greater-than queries also require the array length
bsGT(binarySearch(src, 25), src.length)
// 2
bsGT(binarySearch(src, 40), src.length)
// -1
Authors
If this project contributes to an academic publication, please cite it as:
@misc{thing-arrays,
title = "@thi.ng/arrays",
author = "Karsten Schmidt",
note = "https://thi.ng/arrays",
year = 2018
}
License
© 2018 - 2025 Karsten Schmidt // Apache License 2.0




